/ Hex Artifact Content
Login

Artifact 42e79ef2da625fd8c4364bf952b0515760958775beb38cc9f9e84bcec4115964:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
32b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f  .    return MEM_
32c0: 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Int;.  }.  retur
32d0: 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f  n MEM_Real;.}../
32e0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
32f0: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72  numeric type for
3300: 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45   pMem, either ME
3310: 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61  M_Int or MEM_Rea
3320: 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20  l or both or.** 
3330: 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e  none.  .**.** Un
3340: 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69  like applyNumeri
3350: 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69  cAffinity(), thi
3360: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e  s routine does n
3370: 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e  ot modify pMem->
3380: 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74  flags..** But it
3390: 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e   does set pMem->
33a0: 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  u.r and pMem->u.
33b0: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
33c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
33d0: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
33e0: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
33f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3400: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
3410: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
3420: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3430: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
3440: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
3450: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3460: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
3470: 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75  return computeNu
3480: 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b  mericType(pMem);
3490: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
34a0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
34b0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
34c0: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
34d0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
34e0: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
34f0: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
3500: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
3510: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
3520: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3530: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3540: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
3550: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
3560: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
3570: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
3580: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
3590: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
35a0: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
35b0: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
35c0: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
35d0: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
35e0: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
35f0: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
3600: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3610: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
3620: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3630: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3640: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
3650: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3660: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3670: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3680: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3690: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
36a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
36b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
36c0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
36d0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
36e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
36f0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3700: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3710: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3720: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
3730: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
3740: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
3750: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3760: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3770: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3780: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3790: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
37a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
37b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
37c0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
37d0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
37e0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
37f0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3800: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3810: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3820: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3830: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3840: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3850: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3860: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3870: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3880: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3890: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
38a0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
38b0: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
38c0: 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66  +) = ']';.    if
38d0: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
38e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
38f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3900: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3910: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3920: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3930: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3940: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3950: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3960: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3970: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3980: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
3990: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
39a0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
39b0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
39c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
39d0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
39e0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
39f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3a00: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3a10: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3a20: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3a30: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3a40: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3a50: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3a60: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3a70: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3a80: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3a90: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3aa0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3ab0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3ac0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3ad0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3ae0: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3af0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3b00: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3b10: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3b20: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3b30: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3b40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3b50: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3b60: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3b70: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3b80: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
3b90: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
3ba0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
3bb0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3bc0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3bd0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3be0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3bf0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3c00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3c10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3c20: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3c30: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3c40: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3c50: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3c60: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3c70: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3c80: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
3c90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3ca0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
3cb0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
3cc0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3cd0: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3ce0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3cf0: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
3d00: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
3d10: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
3d20: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
3d30: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
3d40: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3d50: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3d60: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3d70: 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20  NULL");.  }else 
3d80: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
3d90: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3da0: 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  ))==(MEM_Int|MEM
3db0: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69  _Str) ){.    pri
3dc0: 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ntf(" si:%lld", 
3dd0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3de0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3df0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
3e00: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
3e10: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
3e20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
3e30: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
3e40: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3e50: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
3e60: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
3e70: 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e  g", p->u.r);.#en
3e80: 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  dif.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3ea0: 6f 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69  owSet ){.    pri
3eb0: 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29  ntf(" (rowset)")
3ec0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
3ed0: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
3ee0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
3ef0: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
3f00: 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74  zBuf);.    print
3f10: 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a  f(" %s", zBuf);.
3f20: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61    }.  if( p->fla
3f30: 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65  gs & MEM_Subtype
3f40: 20 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74   ) printf(" subt
3f50: 79 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e  ype=0x%02x", p->
3f60: 65 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61  eSubtype);.}.sta
3f70: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3f80: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
3f90: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
3fa0: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
3fb0: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3fc0: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
3fd0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 73 71  intf("\n");.  sq
3fe0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
3ff0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29 3b 0a  mInvariants(p);.
4000: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
4010: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
4020: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
4030: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
4040: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
4050: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
4060: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
4070: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
4080: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
4090: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
40a0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
40b0: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
40c0: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
40d0: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
40e0: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
40f0: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
4100: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
4110: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
4120: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
4130: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
4140: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
4150: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
4160: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
4170: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
4180: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
4190: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
41a0: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
41b0: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
41c0: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
41d0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
41e0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
41f0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4200: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4210: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
4220: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
4230: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
4240: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
4250: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
4260: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4270: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4280: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4290: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
42a0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
42b0: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
42c0: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
42d0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
42e0: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
42f0: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4300: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4310: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
4320: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
4330: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
4340: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
4350: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
4360: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
4370: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4380: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4390: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
43a0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
43b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
43c0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
43d0: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
43e0: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
43f0: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4400: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4410: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4420: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4430: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4440: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4450: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4460: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4470: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
4480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4490: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
44a0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
44b0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
44c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
44d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
44e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
44f0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
4500: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
4510: 28 70 4f 75 74 29 20 29 7b 20 2f 2a 4f 50 54 49  (pOut) ){ /*OPTI
4520: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
4530: 45 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6f  E*/.    return o
4540: 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69 74  ut2PrereleaseWit
4550: 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20 20  hClear(pOut);.  
4560: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
4570: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4580: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f 75  ;.    return pOu
4590: 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  t;.  }.}.../*.**
45a0: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
45b0: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
45c0: 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a  am as we can..**
45d0: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72   This is the cor
45e0: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  e of sqlite3_ste
45f0: 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71  p().  .*/.int sq
4600: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4610: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4630: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4640: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
4650: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
4660: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
4670: 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b    Op *pOp = aOp;
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4690: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
46a0: 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  n */.#if defined
46b0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
46c0: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
46d0: 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f  ROFILE).  Op *pO
46e0: 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20 20  rigOp;          
46f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
4700: 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70 20   pOp at the top 
4710: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23  of the loop */.#
4720: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4730: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
4740: 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20 30  nExtraDelete = 0
4750: 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 69  ;      /* Verifi
4760: 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e 64  es FORDELETE and
4770: 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 73   AUXDELETE flags
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
4790: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
47a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
47b0: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
47c0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
47d0: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
47e0: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
47f0: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
4800: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
4810: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
4820: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
4830: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
4840: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4850: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4860: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4870: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
4880: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4890: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
48a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
48b0: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
48c0: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
48d0: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
48e0: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
48f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4900: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4910: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4920: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4930: 74 3b 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 78  t;   /* Invoke x
4940: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4950: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4960: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4970: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
4980: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4990: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
49a0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
49b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
49c0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
49d0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
49e0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
49f0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a00: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a10: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4a30: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4a40: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4a50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4a60: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4a70: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
4a80: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4a90: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4aa0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4ab0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4ac0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4ad0: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4ae0: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4af0: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4b00: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4b10: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4b20: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4b30: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4b40: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4b50: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4b60: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
4b70: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
4b80: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4b90: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4ba0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4bb0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4bc0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4bd0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4be0: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4bf0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4c00: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4c10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4c20: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
4c30: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4c40: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
4c50: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
4c60: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69  nly!=0 );.  p->i
4c70: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
4c80: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4c90: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4ca0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4cb0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4cc0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4cd0: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
4ce0: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
4cf0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
4d00: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
4d10: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4d20: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4d30: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4d40: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
4d50: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
4d60: 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72 20  .    u32 iPrior 
4d70: 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  = p->aCounter[SQ
4d80: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4d90: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73  VM_STEP];.    as
4da0: 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50  sert( 0 < db->nP
4db0: 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20  rogressOps );.  
4dc0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
4dd0: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
4de0: 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20  Ops - (iPrior % 
4df0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4e00: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
4e10: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
4e20: 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 7d   0xffffffff;.  }
4e30: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
4e40: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
4e50: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4e60: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
4e70: 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28  p->pc==0.   && (
4e80: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28  p->db->flags & (
4e90: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4ea0: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ng|SQLITE_VdbeEQ
4eb0: 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  P|SQLITE_VdbeTra
4ec0: 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ce))!=0.  ){.   
4ed0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
4ee0: 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71  once = 1;.    sq
4ef0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
4f00: 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  l(p);.    if( p-
4f10: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4f20: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
4f30: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
4f40: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4f50: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4f60: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4f70: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4f80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4f90: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
4fa0: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20   &aOp[i]);.     
4fb0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4fc0: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4fd0: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29  SQLITE_VdbeEQP )
4fe0: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
4ff0: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5000: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70  .        if( aOp
5010: 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  [i].opcode==OP_E
5020: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
5030: 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70      if( once ) p
5040: 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72  rintf("VDBE Quer
5050: 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20  y Plan:\n");.   
5060: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
5070: 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e  s\n", aOp[i].p4.
5080: 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e  z);.          on
5090: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
50a0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
50b0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
50c0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
50d0: 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74  beTrace )  print
50e0: 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e  f("VDBE Trace:\n
50f0: 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ");.  }.  sqlite
5100: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
5110: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72  ();.#endif.  for
5120: 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d  (pOp=&aOp[p->pc]
5130: 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20  ; 1; pOp++){.   
5140: 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20 64   /* Errors are d
5150: 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69 76  etected by indiv
5160: 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77  idual opcodes, w
5170: 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74 65  ith an immediate
5180: 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f  .    ** jumps to
5190: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
51a0: 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ror. */.    asse
51b0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
51c0: 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  K );..    assert
51d0: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
51e0: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
51f0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
5200: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
5210: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
5220: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
5230: 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53  Step++;.#ifdef S
5240: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
5250: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
5260: 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29   if( p->anExec )
5270: 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29   p->anExec[(int)
5280: 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65  (pOp-aOp)]++;.#e
5290: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  ndif..    /* Onl
52a0: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
52b0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
52c0: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
52d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
52e0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
52f0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5300: 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
5310: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5320: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
5330: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
5340: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
5350: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
5360: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
5370: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
5380: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
5390: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
53a0: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
53b0: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
53c0: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
53d0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
53e0: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
53f0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5400: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
5410: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5420: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
5430: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
5440: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5450: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
5460: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5470: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
5480: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5490: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
54a0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
54b0: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
54c0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
54d0: 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50    {.      u8 opP
54e0: 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65  roperty = sqlite
54f0: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
5500: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20  pOp->opcode];.  
5510: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5520: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
5530: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5540: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5550: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5560: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5570: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5580: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5590: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
55a0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
55b0: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  1]) );.        a
55c0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
55d0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
55e0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
55f0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
5600: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5610: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5620: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p1]);.      }
5630: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5640: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5650: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
5660: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5670: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2>0 );.        a
5680: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5690: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
56a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
56b0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
56c0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
56d0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
56e0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
56f0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5700: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5710: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5720: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5730: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
5740: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
5750: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5760: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5770: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5780: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5790: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
57a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
57b0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
57c0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
57d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
57e0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
57f0: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
5800: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5810: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5820: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5830: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5840: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5850: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5860: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5870: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5880: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5890: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
58a0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
58b0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
58c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
58d0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
58e0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
58f0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
5900: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5910: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5920: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5930: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5940: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5950: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5960: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5970: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5980: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5990: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
59a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
59b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
59c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
59d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
59e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
59f0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5a00: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
5a10: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
5a20: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
5a30: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
5a40: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5a50: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5ab0: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5ac0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5ad0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5ae0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5af0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5b00: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5b10: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5b20: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5b30: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5b40: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5b50: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5b60: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5b70: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5b80: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5b90: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5ba0: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5bb0: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5bc0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5bd0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5be0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5bf0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5c00: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5c10: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5c20: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5c30: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5c40: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5c50: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5c60: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5c70: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5c80: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5c90: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5ca0: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5cb0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5cc0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5cd0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5ce0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5cf0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5d00: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5d10: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5d20: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5d30: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5d40: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5d50: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5d60: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5d70: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5d80: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5d90: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5da0: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5db0: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5dc0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5dd0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5de0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5df0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5e00: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5e10: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5e20: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5e30: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5e40: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5e50: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5e60: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5e70: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5e80: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5e90: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5ea0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5eb0: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5ec0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5ed0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5ee0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5ef0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5f00: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5f10: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5f20: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5f30: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5f40: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5f50: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5f60: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5f70: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5f80: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5f90: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
5fa0: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
5fb0: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
5fc0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5fd0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
5fe0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
5ff0: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
6000: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
6010: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
6020: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
6030: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
6040: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
6050: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
6060: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
6070: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
6080: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
6090: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
60a0: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
60b0: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
60c0: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
60d0: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
60e0: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
60f0: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
6100: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
6110: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
6120: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
6130: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
6140: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
6150: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
61b0: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
61c0: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
61d0: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
61e0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
61f0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6200: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
6210: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
6220: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
6230: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
6240: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
6250: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
6260: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
6270: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
6280: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
6290: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
62a0: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
62b0: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
62c0: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
62d0: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
62e0: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
62f0: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
6300: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
6310: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
6320: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
6330: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
6340: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
6350: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
6360: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
6370: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6390: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
63a0: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
63b0: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
63c0: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
63d0: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
63e0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
63f0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
6400: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
6410: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6420: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f  * OP_VNext, or O
6430: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6440: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6450: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6460: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6470: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6480: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6490: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
64a0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
64b0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
64c0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
64d0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
64e0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
64f0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6500: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6510: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6520: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6530: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6540: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6550: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6560: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6570: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6580: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6590: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
65a0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
65b0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
65c0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
65d0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
65e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
65f0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6600: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6610: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6620: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6630: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6640: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6650: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6660: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6670: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6680: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6690: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
66a0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
66b0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
66c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
66d0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
66e0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
66f0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6700: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6710: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6720: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6730: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6740: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6750: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6760: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6770: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6780: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6790: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
67a0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
67b0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
67c0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
67d0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
67e0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
67f0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6800: 20 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d 6e    if( nVmStep>=n
6810: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26  ProgressLimit &&
6820: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
6830: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
6840: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6850: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6860: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6870: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6880: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6890: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
68a0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
68b0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
68c0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
68d0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
68e0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
68f0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6900: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6910: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6920: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6930: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6940: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6950: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6960: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6970: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6980: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6990: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
69a0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
69b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
69c0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
69d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
69e0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
69f0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6a00: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6a10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6a20: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6a30: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6a40: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6a50: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6a60: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6a70: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6a80: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6a90: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6aa0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6ab0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6ac0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6ad0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6ae0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6af0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6b00: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6b10: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6b20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6b30: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6b40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6b50: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6b60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6b70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6b80: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6b90: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6ba0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6bb0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6bc0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6bd0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6be0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6c00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6c10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c20: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c30: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c40: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6c50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6c60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6c70: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6c80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6c90: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6ca0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6cb0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6cc0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6cd0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6ce0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6cf0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6d00: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6d10: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6d20: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6d30: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6d40: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6d50: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6d60: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6d70: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6d80: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6d90: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6da0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6db0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6dc0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6dd0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6de0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6df0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6e00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6e10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6e20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6e30: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6e40: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6e50: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6e60: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6e70: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6e80: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6e90: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6ea0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6eb0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6ec0: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6ed0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6ee0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6ef0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
6f00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6f10: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
6f20: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
6f30: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
6f40: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
6f50: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6f60: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
6f70: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6f80: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6f90: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
6fa0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
6fb0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6fc0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
6fd0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6fe0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6ff0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
7000: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
7010: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
7020: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7030: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7040: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7050: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7060: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7070: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7080: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7090: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
70a0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
70b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
70c0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
70d0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
70e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
70f0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
7100: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
7110: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
7120: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7130: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7140: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7150: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7160: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7170: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7180: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7190: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
71a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
71b0: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
71c0: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
71d0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
71e0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
71f0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
7200: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
7210: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7220: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7230: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7240: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7250: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7260: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7270: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7280: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7290: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
72a0: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
72b0: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
72c0: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
72d0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
72e0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
72f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7300: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7310: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7320: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7330: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7340: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7350: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7360: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7370: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7380: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7390: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
73a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
73b0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
73c0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
73d0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
73e0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
73f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7400: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7410: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7420: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7430: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7440: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7450: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7460: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7470: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7480: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7490: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
74a0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
74b0: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
74c0: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
74d0: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
74e0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
74f0: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
7500: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
7510: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
7520: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
7530: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
7540: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
7550: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7560: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7570: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7580: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7590: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
75a0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
75b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
75c0: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
75d0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
75e0: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
75f0: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
7600: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
7610: 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69   P5.**.** Exit i
7620: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c  mmediately.  All
7630: 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65   open cursors, e
7640: 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a  tc are closed.**
7650: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
7660: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
7670: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75  result code retu
7680: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
7690: 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f  exec(), sqlite3_
76a0: 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73  reset(),.** or s
76b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
76c0: 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c  ).  For a normal
76d0: 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75   halt, this shou
76e0: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20  ld be SQLITE_OK 
76f0: 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f  (0)..** For erro
7700: 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f  rs, it can be so
7710: 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20  me other value. 
7720: 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50   If P1!=0 then P
7730: 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65  2 will determine
7740: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
7750: 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  ot to rollback t
7760: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
7770: 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20  action.  Do not 
7780: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50  rollback.** if P
7790: 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74  2==OE_Fail. Do t
77a0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50  he rollback if P
77b0: 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20  2==OE_Rollback. 
77c0: 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74   If P2==OE_Abort
77d0: 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f  ,.** then back o
77e0: 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ut all changes t
77f0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
7800: 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78  d during this ex
7810: 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ecution of the.*
7820: 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e  * VDBE, but do n
7830: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  ot rollback the 
7840: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a  transaction. .**
7850: 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
7860: 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73   null then it is
7870: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
7880: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  e string..**.** 
7890: 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65  P5 is a value be
78a0: 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69  tween 0 and 4, i
78b0: 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d  nclusive, that m
78c0: 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73  odifies the P4 s
78d0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tring..**.**    
78e0: 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a  0:  (no change).
78f0: 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55  **    1:  NOT NU
7900: 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69  LL contraint fai
7910: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a  led: P4.**    2:
7920: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
7930: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7940: 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63  *    3:  CHECK c
7950: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7960: 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46  : P4.**    4:  F
7970: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
7980: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7990: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
79a0: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20  not zero and P4 
79b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76  is NULL, then ev
79c0: 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74  erything after t
79d0: 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69  he ":" is.** omi
79e0: 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  tted..**.** Ther
79f0: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
7a00: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
7a10: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
7a20: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
7a30: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
7a40: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
7a50: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
7a60: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7a70: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
7a80: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
7a90: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
7aa0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
7ab0: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
7ac0: 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a  ame;.  int pcx;.
7ad0: 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70  .  pcx = (int)(p
7ae0: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28  Op - aOp);.  if(
7af0: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
7b00: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
7b10: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
7b20: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
7b30: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
7b40: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
7b50: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61  ame. */.    pFra
7b60: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
7b70: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
7b80: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
7b90: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
7ba0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7bb0: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
7bc0: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
7bd0: 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64   pcx = sqlite3Vd
7be0: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
7bf0: 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20  Frame);.    if( 
7c00: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
7c10: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
7c20: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
7c30: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7c40: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7c50: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7c60: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7c70: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7c80: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7c90: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7ca0: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7cb0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7cc0: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7cd0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
7ce0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
7cf0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
7d00: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
7d10: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
7d20: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
7d30: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7d40: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7d50: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7d60: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7d70: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7d80: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7d90: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7da0: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7db0: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7dc0: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7dd0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7de0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7df0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7e00: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7e10: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73  ->pc = pcx;.  as
7e20: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34  sert( pOp->p5<=4
7e30: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20   );.  if( p->rc 
7e40: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
7e50: 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  p5 ){.      stat
7e60: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  ic const char * 
7e70: 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d  const azType[] =
7e80: 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22   { "NOT NULL", "
7e90: 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22  UNIQUE", "CHECK"
7ea0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
7ed0: 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a  FOREIGN KEY" };.
7ee0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7ef0: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7f00: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7f10: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7f20: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7f30: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
7f40: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7f50: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71  5==4 );.      sq
7f60: 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
7f70: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7f80: 20 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65   failed", azType
7f90: 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20  [pOp->p5-1]);.  
7fa0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
7fb0: 7a 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  z ){.        p->
7fc0: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
7fd0: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a  3MPrintf(db, "%z
7fe0: 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73  : %s", p->zErrMs
7ff0: 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  g, pOp->p4.z);. 
8000: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
8010: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
8020: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
8030: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
8040: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
8050: 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62  log(pOp->p1, "ab
8060: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
8070: 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e  ]: %s", pcx, p->
8080: 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
8090: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
80a0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
80b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
80c0: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
80d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
80e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
80f0: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
8100: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
8110: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
8120: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
8130: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8140: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
8150: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
8160: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
8170: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8180: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
8190: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
81a0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
81b0: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
81c0: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
81d0: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
81e0: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
81f0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8200: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8210: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
8220: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8230: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
8240: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
8250: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
8260: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
8270: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8280: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
8290: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
82a0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
82b0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
82c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
82d0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
82e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
82f0: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
8300: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8310: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8320: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8330: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
8340: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
8350: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8360: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8370: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8380: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8390: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
83a0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
83b0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
83c0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
83d0: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
83e0: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
83f0: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
8400: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8410: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
8420: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
8430: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
8440: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8450: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
8460: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
8470: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
8480: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
8490: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
84a0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
84b0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
84c0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
84d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
84e0: 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  LOAT, out2 */.  
84f0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8500: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8510: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8520: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
8530: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
8540: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
8550: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20   );.  pOut->u.r 
8560: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
8570: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
8580: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
8590: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
85a0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
85b0: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
85c0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
85d0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
85e0: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
85f0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
8600: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
8610: 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64  o a String opcod
8620: 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  e before it is e
8630: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
8640: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
8650: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
8660: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
8670: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
8680: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
8690: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
86a0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
86b0: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
86c0: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
86d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
86e0: 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20  TRING, out2 */. 
86f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8700: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
8710: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8720: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d  (p, pOp);.  pOp-
8730: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
8740: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
8750: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
8760: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
8770: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8780: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
8790: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
87a0: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
87b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
87c0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
87d0: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
87e0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
87f0: 41 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72  ATIC);.    asser
8800: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8810: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54   || rc==SQLITE_T
8820: 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28  OOBIG );.    if(
8830: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
8840: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
8850: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
8860: 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ding) ) goto no_
8870: 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
8880: 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e   pOut->szMalloc>
8890: 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  0 && pOut->zMall
88a0: 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20  oc==pOut->z );. 
88b0: 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d     assert( VdbeM
88c0: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d  emDynamic(pOut)=
88d0: 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 );.    pOut->
88e0: 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  szMalloc = 0;.  
88f0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
8900: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
8910: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
8920: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
8930: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
8940: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
8950: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
8960: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
8970: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
8980: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
8990: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
89a0: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65  Out->n;.  }.  te
89b0: 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
89c0: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e  TE_TOOBIG );.#en
89d0: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
89e0: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
89f0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
8a00: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
8a10: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73  o_big;.  }.  ass
8a20: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8a30: 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  OK );.  /* Fall 
8a40: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
8a50: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
8a60: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
8a70: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
8a80: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
8a90: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8aa0: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
8ab0: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
8ac0: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
8ad0: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
8ae0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
8af0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
8b00: 50 33 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P3 is not zero a
8b10: 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  nd the content o
8b20: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
8b30: 20 65 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68   equal to P5, th
8b40: 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79  en.** the dataty
8b50: 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74  pe of the regist
8b60: 65 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74  er P2 is convert
8b70: 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65  ed to BLOB.  The
8b80: 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74   content is.** t
8b90: 68 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65  he same sequence
8ba0: 20 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73   of bytes, it is
8bb0: 20 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65   merely interpre
8bc0: 74 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  ted as a BLOB in
8bd0: 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74  stead.** of a st
8be0: 72 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68  ring, as if it h
8bf0: 61 64 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49  ad been CAST.  I
8c00: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a  n other words:.*
8c10: 2a 0a 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61  *.** if( P3!=0 a
8c20: 6e 64 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29  nd reg[P3]==P5 )
8c30: 20 72 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54   reg[P2] := CAST
8c40: 28 72 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42  (reg[P2] as BLOB
8c50: 29 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ).*/.case OP_Str
8c60: 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ing: {          
8c70: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
8c80: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
8c90: 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
8ca0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8cb0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
8cc0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
8cd0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8ce0: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
8cf0: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
8d00: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
8d10: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
8d20: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
8d30: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
8d40: 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
8d50: 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d  TE_LIKE_DOESNT_M
8d60: 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28  ATCH_BLOBS.  if(
8d70: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
8d80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8d90: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
8da0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
8db0: 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
8dc0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
8dd0: 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
8de0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
8df0: 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
8e00: 3d 3d 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74  ==pOp->p5 ) pOut
8e10: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
8e20: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
8e30: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64  M_Term;.  }.#end
8e40: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
8e50: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
8e60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
8e70: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50  ynopsis: r[P2..P
8e80: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
8e90: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
8ea0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
8eb0: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
8ec0: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
8ed0: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
8ee0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
8ef0: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
8f00: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
8f10: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
8f20: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
8f30: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
8f40: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
8f50: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
8f60: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
8f70: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
8f80: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
8f90: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8fa0: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8fb0: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8fc0: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
8fd0: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
8fe0: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
8ff0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
9000: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
9010: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
9020: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
9030: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9040: 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31  .  int cnt;.  u1
9050: 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f  6 nullFlag;.  pO
9060: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9070: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63  ase(p, pOp);.  c
9080: 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70  nt = pOp->p3-pOp
9090: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
90a0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
90b0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
90c0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
90d0: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
90e0: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
90f0: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
9100: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70   : MEM_Null;.  p
9110: 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 77 68  Out->n = 0;.  wh
9120: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
9130: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
9140: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9150: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9160: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9170: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
9180: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
9190: 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Flag;.    pOut->
91a0: 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d  n = 0;.    cnt--
91b0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
91c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
91d0: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
91e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
91f0: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9200: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9210: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9220: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9230: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9240: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9250: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9260: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9270: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9280: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
9290: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
92a0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
92b0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
92c0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
92d0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
92e0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
92f0: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9300: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9310: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9320: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9330: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9340: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9350: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
9360: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9370: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9380: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
9390: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
93a0: 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66  lags&~(MEM_Undef
93b0: 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b  ined|MEM_AffMask
93c0: 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62  ))|MEM_Null;.  b
93d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
93e0: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
93f0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
9400: 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e  s: r[P2]=P4 (len
9410: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  =P1).**.** P4 po
9420: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
9430: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
9440: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
9450: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
9460: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
9470: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
9480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
9490: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
94a0: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
94b0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
94c0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
94d0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
94e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
94f0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
9500: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
9510: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
9520: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9530: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9540: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9550: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9560: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
9570: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9580: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
9590: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
95a0: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
95b0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
95c0: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
95d0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
95e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
95f0: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
9600: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
9610: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
9620: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
9630: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
9640: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
9650: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
9660: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
9670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
9680: 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  t2 */.  Mem *pVa
9690: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
96a0: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
96b0: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
96c0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
96d0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
96e0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
96f0: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
9700: 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56  ->p4.z==sqlite3V
9710: 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d  ListNumToName(p-
9720: 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29  >pVList,pOp->p1)
9730: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
9740: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
9750: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
9760: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
9770: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
9780: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9790: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
97a0: 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
97b0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
97c0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
97d0: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
97e0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
97f0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
9800: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9810: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
9820: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9830: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
9840: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
9850: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
9860: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
9870: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
9880: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9890: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
98a0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
98b0: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
98c0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
98d0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
98e0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
98f0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
9900: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
9910: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
9920: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
9930: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
9940: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
9950: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
9960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9970: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
9980: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
9990: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
99a0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
99b0: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
99c0: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
99d0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
99e0: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
99f0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9a00: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
9a10: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
9a20: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
9a30: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
9a40: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
9a50: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
9a60: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9a70: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
9a80: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
9a90: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
9aa0: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9ab0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9ac0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
9ad0: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
9ae0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9af0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9b00: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
9b10: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
9b20: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9b30: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9b40: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
9b50: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
9b60: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9b70: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
9b80: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
9b90: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
9ba0: 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b  copyFrom<pOut ){
9bb0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
9bc0: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e  opyFrom += pOp->
9bd0: 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23  p2 - p1;.    }.#
9be0: 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65  endif.    Deephe
9bf0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
9c00: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9c10: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
9c20: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
9c30: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pOut++;.  }while
9c40: 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b  ( --n );.  break
9c50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9c60: 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20  Copy P1 P2 P3 * 
9c70: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9c80: 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50  [P2@P3+1]=r[P1@P
9c90: 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  3+1].**.** Make 
9ca0: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
9cb0: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e  ers P1..P1+P3 in
9cc0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
9cd0: 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  .P2+P3..**.** Th
9ce0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
9cf0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
9d00: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
9d10: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
9d20: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
9d30: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
9d40: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
9d50: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
9d60: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20  se OP_Copy: {.  
9d70: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
9d80: 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20  p->p3;.  pIn1 = 
9d90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9da0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9db0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
9dc0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
9dd0: 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20  .  while( 1 ){. 
9de0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9df0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
9e00: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
9e10: 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  em);.    Deephem
9e20: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23  eralize(pOut);.#
9e30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
9e40: 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  UG.    pOut->pSc
9e50: 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e  opyFrom = 0;.#en
9e60: 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52  dif.    REGISTER
9e70: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70  _TRACE(pOp->p2+p
9e80: 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b  Op->p3-n, pOut);
9e90: 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d  .    if( (n--)==
9ea0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
9eb0: 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b  Out++;.    pIn1+
9ec0: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
9ed0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43  }../* Opcode: SC
9ee0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
9ef0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9f00: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d  2]=r[P1].**.** M
9f10: 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  ake a shallow co
9f20: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
9f30: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
9f40: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
9f50: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9f60: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9f70: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49  of the value.  I
9f80: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
9f90: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
9fa0: 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70  ob, then the cop
9fb0: 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e  y is only a poin
9fc0: 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72  ter to the.** or
9fd0: 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65  iginal and hence
9fe0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9ff0: 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c   changes so will
a000: 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f   the copy..** Wo
a010: 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67  rse, if the orig
a020: 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61  inal is dealloca
a030: 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65  ted, the copy be
a040: 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a  comes invalid..*
a050: 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72  * Thus the progr
a060: 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  am must guarante
a070: 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  e that the origi
a080: 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61  nal will not cha
a090: 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68  nge.** during th
a0a0: 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68  e lifetime of th
a0b0: 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f  e copy.  Use OP_
a0c0: 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63  Copy to make a c
a0d0: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e  omplete.** copy.
a0e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70  .*/.case OP_SCop
a0f0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a100: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a110: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a120: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
a130: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
a140: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
a150: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
a160: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
a170: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
a180: 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20  _Ephem);.#ifdef 
a190: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
a1a0: 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  f( pOut->pScopyF
a1b0: 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70  rom==0 ) pOut->p
a1c0: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31  ScopyFrom = pIn1
a1d0: 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  ;.#endif.  break
a1e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a1f0: 49 6e 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20  IntCopy P1 P2 * 
a200: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a210: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a   r[P2]=r[P1].**.
a220: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
a230: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
a240: 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
a250: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
a260: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
a270: 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76  s an optimized v
a280: 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20  ersion of SCopy 
a290: 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20  that works only 
a2a0: 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76  for integer.** v
a2b0: 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alues..*/.case O
a2c0: 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20  P_IntCopy: {    
a2d0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a2e0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a2f0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
a300: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
a310: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
a320: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
a330: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
a340: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a350: 49 6e 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31  Int64(pOut, pIn1
a360: 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
a370: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
a380: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
a390: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a3a0: 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32  : output=r[P1@P2
a3b0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ].**.** The regi
a3c0: 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68  sters P1 through
a3d0: 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e   P1+P2-1 contain
a3e0: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
a3f0: 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69  .** results. Thi
a400: 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
a410: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  the sqlite3_step
a420: 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69  () call to termi
a430: 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20  nate.** with an 
a440: 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72  SQLITE_ROW retur
a450: 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65  n code and it se
a460: 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65  ts up the sqlite
a470: 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74  3_stmt.** struct
a480: 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61  ure to provide a
a490: 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 28 50  ccess to the r(P
a4a0: 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76  1)..r(P1+P2-1) v
a4b0: 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20  alues as.** the 
a4c0: 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63  result row..*/.c
a4d0: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
a4e0: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
a4f0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
a500: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
a510: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
a520: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
a530: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
a540: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
a550: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
a560: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
a570: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a580: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
a590: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
a5a0: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
a5b0: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
a5c0: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
a5d0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
a5e0: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
a5f0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
a600: 6d 69 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78  mit .   && db->x
a610: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
a620: 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20  ogressArg)!=0.  
a630: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
a640: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
a650: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
a660: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23  _to_error;.  }.#
a670: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
a680: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
a690: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
a6a0: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
a6b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
a6c0: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
a6d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a6e0: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
a6f0: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
a700: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
a710: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
a720: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
a730: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
a740: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
a750: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
a760: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
a770: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
a780: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a790: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a7a0: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
a7b0: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
a7c0: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
a7d0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
a7e0: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
a7f0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a800: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
a810: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
a820: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
a830: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
a840: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
a850: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
a860: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
a870: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
a880: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a890: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
a8a0: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
a8b0: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
a8c0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a8d0: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
a8e0: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
a8f0: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
a900: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
a910: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
a920: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a930: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
a940: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
a950: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
a960: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
a970: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
a980: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
a990: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a9a0: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
a9b0: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
a9c0: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
a9d0: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
a9e0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
a9f0: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
aa00: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
aa10: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
aa20: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
aa30: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
aa40: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
aa50: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
aa60: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
aa70: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
aa80: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
aa90: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
aaa0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
aab0: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
aac0: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
aad0: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
aae0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
aaf0: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
ab00: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
ab10: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
ab20: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
ab30: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
ab40: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
ab50: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
ab60: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
ab70: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
ab80: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
ab90: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
aba0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
abb0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
abc0: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
abd0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
abe0: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
abf0: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
ac00: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
ac10: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
ac20: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
ac30: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
ac40: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
ac50: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
ac60: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
ac70: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
ac80: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
ac90: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
aca0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
acb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
acc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
acd0: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
ace0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
acf0: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
ad00: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
ad10: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
ad20: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
ad30: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
ad40: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
ad50: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
ad60: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
ad70: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
ad80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ad90: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
ada0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
adb0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
adc0: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
add0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
ade0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
adf0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
ae00: 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20   if( db->mTrace 
ae10: 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  & SQLITE_TRACE_R
ae20: 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54  OW ){.    db->xT
ae30: 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
ae40: 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63  E_ROW, db->pTrac
ae50: 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d  eArg, p, 0);.  }
ae60: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
ae70: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
ae80: 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
ae90: 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20  p - aOp) + 1;.  
aea0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
aeb0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
aec0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
aed0: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
aee0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
aef0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
af00: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
af10: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
af20: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
af30: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
af40: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
af50: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
af60: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
af70: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
af80: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
af90: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
afa0: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
afb0: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
afc0: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
afd0: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
afe0: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
aff0: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
b000: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
b010: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
b020: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
b030: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
b040: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
b050: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
b060: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
b070: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
b080: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b090: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
b0a0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b0b0: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
b0c0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b0d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
b0e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
b0f0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
b100: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
b110: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
b120: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
b130: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b140: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
b150: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
b160: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
b170: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
b180: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
b190: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
b1a0: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
b1b0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
b1c0: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
b1d0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
b1e0: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
b1f0: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
b200: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
b210: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
b220: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
b230: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
b240: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
b250: 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  big;.  }.  if( s
b260: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
b270: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
b280: 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+2, pOut==pIn2
b290: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
b2a0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _mem;.  }.  MemS
b2b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
b2c0: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
b2d0: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
b2e0: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
b2f0: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
b300: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
b310: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
b320: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
b330: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
b340: 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70  >z[nByte]=0;.  p
b350: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20  Out->z[nByte+1] 
b360: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
b370: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
b380: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
b390: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
b3a0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
b3b0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
b3c0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
b3d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b3e0: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
b3f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b400: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b  : r[P3]=r[P1]+r[
b410: 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P2].**.** Add th
b420: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b430: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
b440: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b450: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b460: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b470: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b480: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b490: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b4a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b4b0: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
b4c0: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
b4d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b4e0: 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]*r[P2].**
b4f0: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
b500: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b510: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
b520: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b530: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
b540: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b550: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b560: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b570: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b580: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b590: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
b5a0: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
b5b0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b5c0: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
b5d0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
b5e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b5f0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
b600: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b610: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b620: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b630: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b640: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b650: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b660: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b670: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
b680: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
b690: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b6a0: 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a  3]=r[P2]/r[P1].*
b6b0: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
b6c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b6d0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
b6e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b6f0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b700: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b710: 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50  ster P3 (P3=P2/P
b720: 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  1). If the value
b730: 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
b740: 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
b750: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
b760: 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20  NULL. If either 
b770: 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c  input is .** NUL
b780: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b790: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b7a0: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
b7b0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b7c0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b7d0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b7e0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b7f0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b800: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b810: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b820: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b830: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b840: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b850: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b860: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b870: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b880: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b890: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b8a0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b8b0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b8c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b8d0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b8e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b8f0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b900: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b910: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b920: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b930: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b940: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b950: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b960: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b970: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b980: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b990: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b9a0: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b9b0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b9c0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b9d0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b9e0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b9f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ba00: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
ba10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
ba20: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
ba30: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
ba40: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
ba50: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
ba60: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
ba70: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
ba80: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
ba90: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
baa0: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
bab0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
bac0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
bad0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
bae0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
baf0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
bb00: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
bb10: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
bb20: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
bb30: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
bb40: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
bb50: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
bb60: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
bb70: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
bb80: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
bb90: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
bba0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
bbb0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
bbc0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
bbd0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
bbe0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
bbf0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
bc00: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
bc10: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
bc20: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
bc30: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
bc40: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
bc50: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
bc60: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
bc70: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
bc80: 73 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  s;.  if( (type1 
bc90: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
bca0: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
bcb0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
bcc0: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
bcd0: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
bce0: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
bcf0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
bd00: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
bd10: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
bd20: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
bd30: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bd40: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bd50: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bd60: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
bd70: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
bd80: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
bd90: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bda0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
bdb0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
bdc0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
bdd0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
bde0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bdf0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
be00: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
be10: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
be20: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
be30: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
be40: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
be50: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
be60: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
be70: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
be80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
be90: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
bea0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
beb0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bec0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bed0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bee0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bef0: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
bf00: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bf10: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bf20: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
bf30: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
bf40: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bf50: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
bf60: 65 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d  e if( (flags & M
bf70: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
bf80: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
bf90: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bfa0: 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  l;.  }else{.    
bfb0: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
bfc0: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
bfd0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
bfe0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
bff0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
c000: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
c010: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c020: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c030: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c040: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
c050: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c060: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c070: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
c080: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c090: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c0a0: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
c0b0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c0c0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
c0d0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
c0e0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
c0f0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
c100: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c110: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
c120: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
c130: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
c140: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c150: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
c160: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
c170: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c180: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
c190: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
c1a0: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
c1b0: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
c1c0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c1d0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c1e0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c1f0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c200: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c210: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
c220: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
c230: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c240: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
c250: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c260: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
c270: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
c280: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c290: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c2a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
c2b0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
c2c0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
c2d0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c2e0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
c2f0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
c300: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c310: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c320: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
c330: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
c340: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
c350: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
c360: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
c370: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
c380: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
c390: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
c3a0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c3b0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
c3c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
c3d0: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
c3e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c3f0: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
c400: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
c410: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
c420: 6c 53 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20  lSeq object. If 
c430: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
c440: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c450: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
c460: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
c470: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
c480: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
c490: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
c4a0: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
c4b0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
c4c0: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
c4d0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
c4e0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
c4f0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
c500: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
c510: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
c520: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
c530: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
c540: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
c550: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
c560: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
c570: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
c580: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
c590: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c5a0: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c5b0: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c5c0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c5d0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c5e0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c5f0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c600: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c610: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c620: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c630: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c640: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c650: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c660: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c670: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c680: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c690: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c6a0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c6b0: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c6c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c6d0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c6e0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c6f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c700: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c710: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c720: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
c740: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
c750: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
c760: 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d  [P3]=r[P1]&r[P2]
c770: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
c780: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
c790: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c7a0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
c7b0: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
c7c0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c7d0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c7e0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c7f0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c800: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
c810: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
c820: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c830: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c840: 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]|r[P2].**.** T
c850: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c860: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
c870: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c880: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
c890: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c8a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c8b0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c8c0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c8d0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c8e0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
c8f0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
c900: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c910: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72  : r[P3]=r[P2]<<r
c920: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
c930: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
c940: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c950: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
c960: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
c970: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
c980: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
c990: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
c9a0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
c9b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c9c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
c9d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
c9e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c9f0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
ca00: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
ca10: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ca20: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
ca30: 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]>>r[P1].**.** 
ca40: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
ca50: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
ca60: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
ca70: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
ca80: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
ca90: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
caa0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
cab0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
cac0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
cad0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
cae0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
caf0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
cb00: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
cb10: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb30: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
cb40: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
cb50: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
cb60: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
cb70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb80: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
cb90: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cba0: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cbc0: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
cbd0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cbe0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cbf0: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
cc00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cc10: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
cc20: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
cc30: 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a  4 iA;.  u64 uA;.
cc40: 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f    i64 iB;.  u8 o
cc50: 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p;..  pIn1 = &aM
cc60: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
cc70: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
cc80: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
cc90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
cca0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
ccb0: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
ccc0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
ccd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cce0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
ccf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
cd00: 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iA = sqlite3Vdb
cd10: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
cd20: 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56  .  iB = sqlite3V
cd30: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
cd40: 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f  );.  op = pOp->o
cd50: 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d  pcode;.  if( op=
cd60: 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20  =OP_BitAnd ){.  
cd70: 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65    iA &= iB;.  }e
cd80: 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  lse if( op==OP_B
cd90: 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c  itOr ){.    iA |
cda0: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
cdb0: 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61  ( iB!=0 ){.    a
cdc0: 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68  ssert( op==OP_Sh
cdd0: 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d  iftRight || op==
cde0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a  OP_ShiftLeft );.
cdf0: 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74  .    /* If shift
ce00: 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76  ing by a negativ
ce10: 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20  e amount, shift 
ce20: 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72  in the other dir
ce30: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66  ection */.    if
ce40: 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( iB<0 ){.      
ce50: 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74  assert( OP_Shift
ce60: 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c  Right==OP_ShiftL
ce70: 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f  eft+1 );.      o
ce80: 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65  p = 2*OP_ShiftLe
ce90: 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20  ft + 1 - op;.   
cea0: 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29     iB = iB>(-64)
ceb0: 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20   ? -iB : 64;.   
cec0: 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d   }..    if( iB>=
ced0: 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d  64 ){.      iA =
cee0: 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f   (iA>=0 || op==O
cef0: 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30  P_ShiftLeft) ? 0
cf00: 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   : -1;.    }else
cf10: 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  {.      memcpy(&
cf20: 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28  uA, &iA, sizeof(
cf30: 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uA));.      if( 
cf40: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
cf50: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c   ){.        uA <
cf60: 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c  <= iB;.      }el
cf70: 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e  se{.        uA >
cf80: 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f  >= iB;.        /
cf90: 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e  * Sign-extend on
cfa0: 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f   a right shift o
cfb0: 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d  f a negative num
cfc0: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ber */.        i
cfd0: 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20  f( iA<0 ) uA |= 
cfe0: 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66  ((((u64)0xffffff
cff0: 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66  ff)<<32)|0xfffff
d000: 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b  fff) << (64-iB);
d010: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d  .      }.      m
d020: 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20  emcpy(&iA, &uA, 
d030: 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20  sizeof(iA));.   
d040: 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
d050: 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65  .i = iA;.  MemSe
d060: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
d070: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d080: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d090: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
d0a0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d0b0: 3a 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32  : r[P1]=r[P1]+P2
d0c0: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
d0d0: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
d0e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d0f0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
d100: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
d110: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
d120: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
d130: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
d140: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
d150: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
d160: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
d170: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d180: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d190: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d1a0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d1b0: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
d1c0: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
d1d0: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
d1e0: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
d1f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d200: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
d210: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
d220: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
d230: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d240: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
d250: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
d260: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
d270: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
d280: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
d290: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
d2a0: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
d2b0: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
d2c0: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
d2d0: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
d2e0: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
d2f0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
d300: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
d310: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
d320: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d330: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
d340: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d350: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
d360: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d370: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
d380: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
d390: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
d3a0: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
d3b0: 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  g);.    VdbeBran
d3c0: 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66  chTaken((pIn1->f
d3d0: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30  lags&MEM_Int)==0
d3e0: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70  , 2);.    if( (p
d3f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d400: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
d410: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
d420: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
d430: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
d440: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
d450: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
d460: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
d470: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
d480: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d  p_to_p2;.      }
d490: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
d4a0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
d4b0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
d4c0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
d4d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d4e0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
d4f0: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
d500: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
d510: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
d520: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
d530: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
d540: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
d550: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
d560: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
d570: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
d580: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
d590: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
d5a0: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
d5b0: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
d5c0: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
d5d0: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
d5e0: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
d5f0: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
d600: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
d610: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
d620: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
d630: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
d640: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
d650: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
d660: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
d670: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d680: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d690: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d6a0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
d6b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
d6c0: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
d6d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
d6e0: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
d6f0: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
d700: 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50  pcode: Cast P1 P
d710: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
d720: 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
d730: 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65  P1]).**.** Force
d740: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d750: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
d760: 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64  the type defined
d770: 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c   by P2..** .** <
d780: 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  ul>.** <li> P2==
d790: 27 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a  'A' &rarr; BLOB.
d7a0: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20  ** <li> P2=='B' 
d7b0: 26 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c  &rarr; TEXT.** <
d7c0: 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72  li> P2=='C' &rar
d7d0: 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c  r; NUMERIC.** <l
d7e0: 69 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72  i> P2=='D' &rarr
d7f0: 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69  ; INTEGER.** <li
d800: 3e 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b  > P2=='E' &rarr;
d810: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
d820: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d830: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d840: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d850: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d860: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
d870: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
d880: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
d890: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
d8a0: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
d8b0: 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c  BLOB && pOp->p2<
d8c0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
d8d0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d8e0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d8f0: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
d900: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d910: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
d920: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d930: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d940: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
d950: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
d960: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
d970: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
d980: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
d990: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
d9a0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
d9b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
d9c0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d9d0: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
d9e0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
d9f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
da00: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
da10: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
da20: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
da30: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69  BSIZE(pIn1);.  i
da40: 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
da50: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
da60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
da70: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
da80: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
da90: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
daa0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
dab0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72  sis: IF r[P3]==r
dac0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  [P1].**.** Compa
dad0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
dae0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
daf0: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
db00: 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  ==reg(P1) then.*
db10: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
db20: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
db30: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
db40: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
db50: 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65  5, then.** store
db60: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
db70: 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67  omparison in reg
db80: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
db90: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
dba0: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
dbb0: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
dbc0: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
dbd0: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
dbe0: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
dbf0: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
dc00: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
dc10: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
dc20: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
dc30: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
dc40: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
dc50: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
dc60: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
dc70: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
dc80: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
dc90: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
dca0: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
dcb0: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
dcc0: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
dcd0: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
dce0: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
dcf0: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
dd00: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
dd10: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
dd20: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
dd30: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
dd40: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dd50: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
dd60: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
dd70: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
dd80: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
dd90: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
dda0: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
ddb0: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
ddc0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
ddd0: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
dde0: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
ddf0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
de00: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
de10: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
de20: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
de30: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
de40: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
de50: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
de60: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
de70: 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74   is used to do t
de80: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
de90: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
dea0: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
deb0: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
dec0: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
ded0: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
dee0: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
def0: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
df00: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
df10: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
df20: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
df30: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
df40: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
df50: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
df60: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
df70: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
df80: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
df90: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
dfa0: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  obs..**.** If SQ
dfb0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
dfc0: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
dfd0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
dfe0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
dff0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e000: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e010: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e020: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
e030: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
e040: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
e050: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
e060: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e070: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e080: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
e090: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
e0a0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e0b0: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
e0c0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
e0d0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
e0e0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e0f0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
e100: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a  ted from P5..**.
e110: 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54  ** If both SQLIT
e120: 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51  E_STOREP2 and SQ
e130: 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c  LITE_KEEPNULL fl
e140: 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e  ags are set then
e150: 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
e160: 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79  of r[P2] is only
e170: 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
e180: 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  new value is NUL
e190: 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a  L or 0 (false)..
e1a0: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
e1b0: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
e1c0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
e1d0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
e1e0: 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f  y 1 (true)..*/./
e1f0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
e200: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e210: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
e220: 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]!=r[P1].**.** T
e230: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e240: 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  ike the Eq opcod
e250: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e260: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e270: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e280: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e290: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
e2a0: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
e2b0: 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Eq opcode for.
e2c0: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
e2d0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e2e0: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
e2f0: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
e300: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
e310: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
e320: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
e330: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
e340: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
e350: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
e360: 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20  or 1 (true)..** 
e370: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
e380: 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61  a prior r[P2] va
e390: 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  lue will not be 
e3a0: 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 30  overwritten by 0
e3b0: 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20   (false)..*/./* 
e3c0: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
e3d0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e3e0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
e3f0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
e400: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
e410: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
e420: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
e430: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
e440: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
e450: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
e460: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e470: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
e480: 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72  5 store.** the r
e490: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e4a0: 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e  son (0 or 1 or N
e4b0: 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74  ULL) into regist
e4c0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
e4d0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
e4e0: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
e4f0: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
e500: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
e510: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
e520: 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68  then the take th
e530: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
e540: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e550: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
e560: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
e570: 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f  ough if either o
e580: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
e590: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
e5a0: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
e5b0: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
e5c0: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
e5d0: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
e5e0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
e5f0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
e600: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
e610: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
e620: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
e630: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
e640: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
e650: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
e660: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
e670: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
e680: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
e690: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
e6a0: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
e6b0: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
e6c0: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
e6d0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
e6e0: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
e6f0: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
e700: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e710: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
e720: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
e730: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
e740: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
e750: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
e760: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
e770: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
e780: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
e790: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
e7a0: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
e7b0: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
e7c0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
e7d0: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
e7e0: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
e7f0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
e800: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
e810: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
e820: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
e830: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
e840: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
e850: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
e860: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
e870: 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20  .** P4 is  used 
e880: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
e890: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
e8a0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
e8b0: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
e8c0: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
e8d0: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
e8e0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
e8f0: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
e900: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
e910: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
e920: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
e930: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
e940: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
e950: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
e960: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e970: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
e980: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
e990: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e9a0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f  than blobs..*/./
e9b0: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
e9c0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e9d0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
e9e0: 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]<=r[P1].**.** T
e9f0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
ea00: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ea10: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ea20: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ea30: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
ea40: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
ea50: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
ea60: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
ea70: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
ea80: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
ea90: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
eaa0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
eab0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
eac0: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
ead0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eae0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b  sis: IF r[P3]>r[
eaf0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
eb00: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
eb10: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
eb20: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
eb30: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eb40: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
eb50: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
eb60: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
eb70: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
eb80: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
eb90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
eba0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ebb0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
ebc0: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
ebd0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
ebe0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e  opsis: IF r[P3]>
ebf0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
ec00: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
ec10: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ec20: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ec30: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ec40: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
ec50: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
ec60: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
ec70: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
ec80: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
ec90: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
eca0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ecb0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ecc0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
ecd0: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
ece0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ecf0: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
ed00: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ed10: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
ed20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ed30: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
ed40: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ed50: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
ed60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ed70: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
ed80: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
ed90: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
eda0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
edb0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
edc0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ede0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
edf0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ee00: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ee20: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
ee30: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ee40: 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b    int res, res2;
ee50: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
ee60: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
ee70: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
ee80: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
ee90: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
eea0: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
eeb0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
eec0: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
eed0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
eee0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
eef0: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
ef00: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
ef10: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
ef20: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
ef30: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
ef40: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
ef50: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
ef60: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
ef70: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
ef80: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
ef90: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
efa0: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
efb0: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
efc0: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
efd0: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
efe0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
eff0: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
f000: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
f010: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
f020: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
f030: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
f040: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
f050: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
f060: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
f070: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
f080: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
f090: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
f0a0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
f0b0: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
f0c0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
f0d0: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
f0e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
f0f0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
f100: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
f110: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
f120: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
f130: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
f140: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
f150: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
f160: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d  TE_JUMPIFNULL)==
f170: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
f180: 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45  flags1&flags3&ME
f190: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f1a0: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f1b0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f1c0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f1d0: 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 0;  /* Opera
f1e0: 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  nds are equal */
f1f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f200: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
f210: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
f220: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
f230: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
f240: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
f250: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
f260: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
f270: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f280: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
f290: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
f2a0: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
f2b0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
f2c0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
f2d0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
f2e0: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
f2f0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
f300: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
f310: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
f320: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f330: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
f340: 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20   iCompare = 1;  
f350: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
f360: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
f370: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
f380: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
f390: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
f3a0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f3b0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
f3c0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
f3d0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
f3e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f3f0: 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
f400: 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
f410: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f420: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
f430: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
f440: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
f450: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
f460: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
f470: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
f480: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
f490: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
f4a0: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
f4b0: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
f4c0: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
f4d0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
f4e0: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
f4f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
f500: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
f510: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
f520: 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  3)&MEM_Str ){.  
f530: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f540: 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
f550: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f560: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f570: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
f580: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
f590: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 74 65  0);.          te
f5a0: 73 74 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d  stcase( flags3!=
f5b0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 20 2f  pIn3->flags ); /
f5c0: 2a 20 50 6f 73 73 69 62 6c 65 20 69 66 20 70 49  * Possible if pI
f5d0: 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20 20 20  n1==pIn3 */.    
f5e0: 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70        flags3 = p
f5f0: 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
f600: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
f610: 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  ( (flags3 & (MEM
f620: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
f630: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
f640: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
f650: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
f660: 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
f670: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
f680: 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
f690: 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
f6a0: 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
f6b0: 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
f6c0: 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
f6d0: 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
f6e0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
f6f0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
f700: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
f710: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
f720: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
f730: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
f740: 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
f750: 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
f760: 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
f770: 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
f780: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
f790: 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
f7a0: 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
f7b0: 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
f7c0: 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
f7d0: 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
f7e0: 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
f7f0: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
f800: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
f810: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
f820: 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
f830: 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
f840: 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
f850: 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
f860: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
f870: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f880: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
f890: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f8a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
f8b0: 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
f8c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
f8d0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
f8e0: 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
f8f0: 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
f900: 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
f910: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
f920: 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
f930: 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
f940: 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
f950: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
f960: 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
f970: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
f980: 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
f990: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
f9a0: 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
f9b0: 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
f9c0: 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
f9d0: 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
f9e0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
f9f0: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
fa00: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
fa10: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
fa20: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
fa30: 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
fa40: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
fa50: 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
fa60: 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
fa70: 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
fa80: 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
fa90: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
faa0: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
fab0: 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
fac0: 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
fad0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
fae0: 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
faf0: 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
fb00: 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
fb10: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
fb20: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
fb30: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
fb40: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
fb50: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
fb60: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
fb70: 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65  ll);.  }.compare
fb80: 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69  _op:.  /* At thi
fb90: 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20  s point, res is 
fba0: 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20  negative, zero, 
fbb0: 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72  or positive if r
fbc0: 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c  eg[P1] is.  ** l
fbd0: 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20  ess than, equal 
fbe0: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
fbf0: 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73  han reg[P3], res
fc00: 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70  pectively.  Comp
fc10: 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73  ute.  ** the ans
fc20: 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72  wer to this oper
fc30: 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65  ator in res2, de
fc40: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20  pending on what 
fc50: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20  the comparison. 
fc60: 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74   ** operator act
fc70: 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e  ually is.  The n
fc80: 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
fc90: 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  e depends on the
fca0: 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20   fact.  ** that 
fcb0: 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e  the 6 comparison
fcc0: 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63   operators are c
fcd0: 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67  onsecutive integ
fce0: 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a  ers in this.  **
fcf0: 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c   order:  NE, EQ,
fd00: 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20   GT, LE, LT, GE 
fd10: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  */.  assert( OP_
fd20: 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61  Eq==OP_Ne+1 ); a
fd30: 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50  ssert( OP_Gt==OP
fd40: 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28  _Ne+2 ); assert(
fd50: 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20   OP_Le==OP_Ne+3 
fd60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
fd70: 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61  Lt==OP_Ne+4 ); a
fd80: 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50  ssert( OP_Ge==OP
fd90: 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72  _Ne+5 );.  if( r
fda0: 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20  es<0 ){         
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fdc0: 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65  * ne, eq, gt, le
fdd0: 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20  , lt, ge */.    
fde0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
fdf0: 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b  igned char aLTb[
fe00: 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c  ] = { 1,  0,  0,
fe10: 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20    1,  1,  0 };. 
fe20: 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70     res2 = aLTb[p
fe30: 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
fe40: 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Ne];.  }else if(
fe50: 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
fe60: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
fe70: 67 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d  gned char aEQb[]
fe80: 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20   = { 0,  1,  0, 
fe90: 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20   1,  0,  1 };.  
fea0: 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f    res2 = aEQb[pO
feb0: 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
fec0: 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e];.  }else{.   
fed0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
fee0: 73 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62  signed char aGTb
fef0: 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31  [] = { 1,  0,  1
ff00: 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a  ,  0,  0,  1 };.
ff10: 20 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b      res2 = aGTb[
ff20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
ff30: 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _Ne];.  }..  /* 
ff40: 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
ff50: 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
ff60: 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
ff70: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
ff80: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
ff90: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ffa0: 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
ffb0: 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
ffc0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
ffd0: 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
ffe0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fff0: 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10000 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
10010 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
10020 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10030 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10040 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
10050 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10060 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d  p->p2];.    iCom
10070 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20  pare = res;.    
10080 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  if( (pOp->p5 & S
10090 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21  QLITE_KEEPNULL)!
100a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  =0 ){.      /* T
100b0 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  he KEEPNULL flag
100c0 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20   prevents OP_Eq 
100d0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
100e0 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20   a NULL with 1. 
100f0 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76       ** and prev
10100 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20  ents OP_Ne from 
10110 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c  overwriting NULL
10120 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66   with 0.  This f
10130 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  lag.      ** is 
10140 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e  only used in con
10150 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68  texts where eith
10160 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28  er:.      **   (
10170 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20  1) op==OP_Eq && 
10180 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20  (r[P2]==NULL || 
10190 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20  r[P2]==0).      
101a0 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f  **   (2) op==OP_
101b0 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Ne && (r[P2]==NU
101c0 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a  LL || r[P2]==1).
101d0 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f        ** Therefo
101e0 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63  re it is not nec
101f0 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20  essary to check 
10200 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10210 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a  [P2] for.      *
10220 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20  * NULL. */.     
10230 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
10240 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70  code==OP_Ne || p
10250 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10260 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  q );.      asser
10270 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65  t( res2==0 || re
10280 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  s2==1 );.      t
10290 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30  estcase( res2==0
102a0 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
102b0 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
102c0 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
102d0 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  1 && pOp->opcode
102e0 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
102f0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10300 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 && pOp->opcod
10310 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10320 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
10330 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==1 && pOp->opco
10340 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
10350 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63     if( (pOp->opc
10360 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73  ode==OP_Eq)==res
10370 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d  2 ) break;.    }
10380 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
10390 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
103a0 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
103b0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
103c0 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
103d0 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47   = res2;.    REG
103e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
103f0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
10400 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
10410 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
10420 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
10430 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
10440 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b  .    if( res2 ){
10450 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
10460 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
10470 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10480 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74   Opcode: ElseNot
10490 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  Eq * P2 * * *.**
104a0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
104b0 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  must immediately
104c0 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74   follow an OP_Lt
104d0 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72   or OP_Gt compar
104e0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a  ison operator..*
104f0 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61  * If result of a
10500 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10510 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  on on the same t
10520 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  wo operands.** w
10530 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c  ould have be NUL
10540 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20  L or false (0), 
10550 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74  then then jump t
10560 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
10570 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50   result of an OP
10580 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Eq comparison o
10590 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f  n the two previo
105a0 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  us operands.** w
105b0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74  ould have been t
105c0 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61  rue (1), then fa
105d0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
105e0 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71  ase OP_ElseNotEq
105f0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  : {       /* sam
10600 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20  e as TK_ESCAPE, 
10610 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10620 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61  ( pOp>aOp );.  a
10630 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
10640 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20  pcode==OP_Lt || 
10650 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
10660 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72  OP_Gt );.  asser
10670 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20  t( pOp[-1].p5 & 
10680 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
10690 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
106a0 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c  ken(iCompare!=0,
106b0 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70   2);.  if( iComp
106c0 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75  are!=0 ) goto ju
106d0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
106e0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
106f0 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
10700 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
10710 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
10720 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
10730 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
10740 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a  or in the next.*
10750 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
10760 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
10770 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
10780 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a   P4 operand..**.
10790 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
107a0 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
107b0 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
107c0 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
107d0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
107e0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
107f0 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
10800 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
10810 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
10820 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
10830 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
10840 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
10850 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
10860 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
10870 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
10880 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
10890 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
108a0 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
108b0 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
108c0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
108d0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
108e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
108f0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
10900 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
10910 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
10920 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
10930 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61  opcode==OP_Compa
10940 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  re );.  assert( 
10950 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c  pOp[1].p5 & OPFL
10960 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20  AG_PERMUTE );.  
10970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10980 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
10990 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
109a0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
109b0 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
109c0 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
109d0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
109e0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
109f0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
10a00 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
10a10 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
10a20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
10a30 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
10a40 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
10a50 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
10a60 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
10a70 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
10a80 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
10a90 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
10aa0 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
10ab0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
10ac0 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
10ad0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
10ae0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
10af0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
10b00 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
10b10 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
10b20 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
10b30 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
10b40 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
10b50 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
10b60 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
10b70 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
10b80 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
10b90 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
10ba0 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
10bb0 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
10bc0 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
10bd0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
10be0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
10bf0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
10c00 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
10c10 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
10c20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
10c30 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
10c40 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
10c50 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
10c60 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
10c70 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
10c80 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
10c90 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
10ca0 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
10cb0 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
10cc0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
10cd0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
10ce0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
10cf0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
10d00 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
10d10 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
10d20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
10d30 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
10d40 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
10d50 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10d60 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
10d70 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
10d80 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
10d90 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
10da0 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
10db0 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
10dc0 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65  e;     /* The pe
10dd0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20  rmutation */..  
10de0 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
10df0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
10e00 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74  0 ){.    aPermut
10e10 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 0;.  }else{.
10e20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
10e30 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
10e40 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
10e50 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  e==OP_Permutatio
10e60 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n );.    assert(
10e70 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
10e80 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
10e90 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70      aPermute = p
10ea0 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31  Op[-1].p4.ai + 1
10eb0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50  ;.    assert( aP
10ec0 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d  ermute!=0 );.  }
10ed0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
10ee0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
10ef0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
10f00 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
10f10 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
10f20 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
10f30 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
10f40 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20  pOp->p2;.#ifdef 
10f50 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
10f60 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
10f70 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
10f80 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
10f90 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
10fa0 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
10fb0 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
10fc0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
10fd0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
10fe0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
10ff0 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
11000 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
11010 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  mx<=(p->nMem+1 -
11020 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11030 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11040 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11050 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  1+n<=(p->nMem+1 
11060 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11070 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
11080 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
11090 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
110a0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
110b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
110c0 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
110d0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
110e0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
110f0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
11100 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
11110 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
11120 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
11130 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
11140 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
11150 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
11160 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
11170 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
11180 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11190 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
111a0 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
111b0 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
111c0 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29  nfo->nKeyField )
111d0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
111e0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
111f0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11200 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11210 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
11220 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
11230 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
11240 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
11250 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
11260 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
11270 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
11280 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
11290 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
112a0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
112b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
112c0 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
112d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
112e0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
112f0 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
11300 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
11310 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11320 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
11330 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
11340 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
11350 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
11360 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
11370 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
11380 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
11390 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
113a0 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
113b0 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
113c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
113d0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
113e0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
113f0 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70  nchTaken(0,3); p
11400 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11410 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
11420 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
11430 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11440 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70  hTaken(1,3); pOp
11450 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
11460 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
11470 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11480 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(2,3); pOp = &
11490 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
114a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
114b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
114c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
114d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
114e0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
114f0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11500 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
11510 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11520 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
11530 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
11540 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
11550 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11560 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11570 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
11580 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
11590 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
115a0 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
115b0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
115c0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
115d0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
115e0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
115f0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
11600 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11610 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11620 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
11630 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11640 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
11650 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
11660 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
11670 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
11680 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
11690 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
116a0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
116b0 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
116c0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
116d0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
116e0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
116f0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
11700 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
11710 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
11720 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
11730 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
11740 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
11750 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11760 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
11770 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
11780 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
11790 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
117a0 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
117b0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
117c0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
117d0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
117e0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
117f0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11800 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
11810 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
11820 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
11830 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
11840 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
11850 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11860 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
11870 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11880 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
11890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
118a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
118b0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
118c0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
118d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
118e0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
118f0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11900 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
11910 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
11920 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11930 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
11940 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
11950 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
11960 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
11970 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
11980 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
11990 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
119a0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
119b0 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
119c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
119d0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
119e0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
119f0 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
11a00 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
11a10 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
11a20 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
11a30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
11a40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11a50 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
11a60 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
11a70 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
11a80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
11a90 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
11aa0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
11ab0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
11ac0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11ad0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11ae0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11af0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
11b00 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
11b10 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
11b20 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11b30 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
11b40 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
11b50 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
11b60 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
11b70 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
11b80 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11b90 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
11ba0 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
11bb0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
11bc0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11be0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
11bf0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
11c00 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11c10 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
11c20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11c30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11c40 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
11c50 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11c60 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11c70 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
11c80 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
11c90 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
11ca0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11cb0 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
11cc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11cd0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
11ce0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11cf0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
11d00 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
11d10 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
11d20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
11d30 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
11d40 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
11d50 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
11d60 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
11d70 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11d80 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
11d90 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
11da0 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
11db0 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
11dc0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
11dd0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
11de0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
11df0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
11e00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
11e10 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11e20 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
11e30 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
11e40 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11e50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11e60 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
11e70 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
11e80 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
11e90 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
11ea0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
11eb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11ec0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
11ed0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
11ee0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
11ef0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
11f00 63 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ction the first 
11f10 74 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65  time this opcode
11f20 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72   is.** encounter
11f30 65 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63  ed on each invoc
11f40 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74  ation of the byt
11f50 65 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20  e-code program. 
11f60 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f   Jump to P2.** o
11f70 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64  n the second and
11f80 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
11f90 65 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e  encounters durin
11fa0 67 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63  g the same invoc
11fb0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70  ation..**.** Top
11fc0 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20  -level programs 
11fd0 64 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20  determine first 
11fe0 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f  invocation by co
11ff0 6d 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a  mparing the P1.*
12000 2a 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73  * operand agains
12010 74 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64  t the P1 operand
12020 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20   on the OP_Init 
12030 6f 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65  opcode at the be
12040 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68  ginning.** of th
12050 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74  e program.  If t
12060 68 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66  he P1 values dif
12070 66 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  fer, then fall t
12080 68 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a  hrough and make.
12090 2a 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69  ** the P1 of thi
120a0 73 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74  s opcode equal t
120b0 6f 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49  o the P1 of OP_I
120c0 6e 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75  nit.  If P1 valu
120d0 65 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61  es are.** the sa
120e0 6d 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  me then take the
120f0 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72   jump..**.** For
12100 20 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68   subprograms, th
12110 65 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b  ere is a bitmask
12120 20 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d   in the VdbeFram
12130 65 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65  e that determine
12140 73 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  s.** whether or 
12150 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f  not the jump sho
12160 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54  uld be taken.  T
12170 68 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65  he bitmask is ne
12180 63 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75  cessary.** becau
12190 73 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65  se the self-alte
121a0 72 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20  ring code trick 
121b0 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  does not work fo
121c0 72 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74  r recursive.** t
121d0 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65  riggers..*/.case
121e0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
121f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
12200 2a 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20  */.  u32 iAddr; 
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12220 2a 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69  * Address of thi
12230 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  s instruction */
12240 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f  .  assert( p->aO
12250 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[0].opcode==OP_
12260 49 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d  Init );.  if( p-
12270 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69  >pFrame ){.    i
12280 41 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70  Addr = (int)(pOp
12290 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20   - p->aOp);.    
122a0 69 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e  if( (p->pFrame->
122b0 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26  aOnce[iAddr/8] &
122c0 20 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29   (1<<(iAddr & 7)
122d0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56  ))!=0 ){.      V
122e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
122f0 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  , 2);.      goto
12300 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
12310 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65   }.    p->pFrame
12320 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d  ->aOnce[iAddr/8]
12330 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20   |= 1<<(iAddr & 
12340 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  7);.  }else{.   
12350 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70   if( p->aOp[0].p
12360 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  1==pOp->p1 ){.  
12370 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12380 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
12390 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
123a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64  ;.    }.  }.  Vd
123b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
123c0 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d   2);.  pOp->p1 =
123d0 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20   p->aOp[0].p1;. 
123e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
123f0 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12400 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12410 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12420 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12430 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12440 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12450 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12460 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12470 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12480 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12490 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
124a0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
124b0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
124c0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
124d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
124e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
124f0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12500 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12510 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
12520 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
12530 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
12540 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
12550 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
12560 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
12570 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
12580 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
12590 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
125a0 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
125b0 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
125c0 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
125d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
125e0 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
125f0 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
12600 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
12610 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
12620 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12630 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
12640 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12650 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
12660 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
12670 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
12680 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
12690 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
126a0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
126b0 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
126c0 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
126d0 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
126e0 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
126f0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
12700 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
12710 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
12720 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
12730 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
12740 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
12750 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
12760 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12770 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
12780 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
12790 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  s: if r[P1]==NUL
127a0 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
127b0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
127c0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
127d0 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
127e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
127f0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
12800 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
12810 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
12820 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
12830 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
12840 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
12850 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
12860 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
12870 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
12880 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
12890 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
128a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
128b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
128c0 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
128d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
128e0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
128f0 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
12900 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
12910 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12920 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
12930 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
12940 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
12950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12960 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
12970 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12980 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12990 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
129a0 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
129b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
129c0 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)==0, 2);.  if(
129d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
129e0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
129f0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12a00 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
12a10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12a20 49 66 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20  IfNullRow P1 P2 
12a30 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
12a40 69 73 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f  is: if P1.nullRo
12a50 77 20 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c  w then r[P3]=NUL
12a60 4c 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  L, goto P2.**.**
12a70 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f   Check the curso
12a80 72 20 50 31 20 74 6f 20 73 65 65 20 69 66 20 69  r P1 to see if i
12a90 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  t is currently p
12aa0 6f 69 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c  ointing at a NUL
12ab0 4c 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20  L row..** If it 
12ac0 69 73 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67  is, then set reg
12ad0 69 73 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c  ister P3 to NULL
12ae0 20 61 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69   and jump immedi
12af0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
12b00 49 66 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20  If P1 is not on 
12b10 61 20 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e  a NULL row, then
12b20 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69   fall through wi
12b30 74 68 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79  thout making any
12b40 0a 2a 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a  .** changes..*/.
12b50 63 61 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f  case OP_IfNullRo
12b60 77 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  w: {         /* 
12b70 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
12b80 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
12b90 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
12ba0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
12bb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
12bc0 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d  ]!=0 );.  if( p-
12bd0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
12be0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
12bf0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12c00 74 4e 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70  tNull(aMem + pOp
12c10 2d 3e 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ->p3);.    goto 
12c20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
12c30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12c40 70 63 6f 64 65 3a 20 4c 6f 63 61 74 69 6f 6e 20  pcode: Location 
12c50 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
12c60 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 20  Synopsis: r[P3] 
12c70 3d 20 6c 6f 63 61 74 69 6f 6e 28 50 31 29 0a 2a  = location(P1).*
12c80 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
12c90 67 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65  gister r[P3] the
12ca0 20 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 74 68 65   location in the
12cb0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
12cc0 68 61 74 20 69 73 20 74 68 65 0a 2a 2a 20 73 74  hat is the.** st
12cd0 61 72 74 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  art of the paylo
12ce0 61 64 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ad for the recor
12cf0 64 20 61 74 20 77 68 69 63 68 20 74 68 61 74 20  d at which that 
12d00 63 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72  cursor P1 is cur
12d10 72 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69 6e 74 69  rently.** pointi
12d20 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ng..**.** P2 is 
12d30 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
12d40 72 20 66 6f 72 20 74 68 65 20 61 72 67 75 6d 65  r for the argume
12d50 6e 74 20 74 6f 20 74 68 65 20 6c 6f 63 61 74 69  nt to the locati
12d60 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  on() function..*
12d70 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
12d80 65 73 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74  es not use P2 it
12d90 73 65 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32  self, but the P2
12da0 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
12db0 79 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65  y the.** code ge
12dc0 6e 65 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31  nerator.  The P1
12dd0 2c 20 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65  , P2, and P3 ope
12de0 72 61 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70  rands to this op
12df0 63 6f 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20  code are the.** 
12e00 61 73 20 61 73 20 66 6f 72 20 4f 50 5f 43 6f 6c  as as for OP_Col
12e10 75 6d 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  umn..*/.case OP_
12e20 4c 6f 63 61 74 69 6f 6e 3a 20 7b 20 20 20 20 20  Location: {     
12e30 20 20 20 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a       /* out3 */.
12e40 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
12e50 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
12e60 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73   cursor */.  ass
12e70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
12e80 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
12e90 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
12ea0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
12eb0 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  ];.  pOut = &p->
12ec0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
12ed0 20 69 66 28 20 70 43 3d 3d 30 20 7c 7c 20 70 43   if( pC==0 || pC
12ee0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
12ef0 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20  YPE_BTREE ){.   
12f00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12f10 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
12f20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
12f30 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
12f40 34 28 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42  4(pOut, sqlite3B
12f50 74 72 65 65 4c 6f 63 61 74 69 6f 6e 28 70 43 2d  treeLocation(pC-
12f60 3e 75 63 2e 70 43 75 72 73 6f 72 29 29 3b 0a 20  >uc.pCursor));. 
12f70 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12f80 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
12f90 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
12fa0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
12fb0 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
12fc0 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
12fd0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
12fe0 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
12ff0 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
13000 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
13010 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
13020 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
13030 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
13040 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
13050 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
13060 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
13070 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
13080 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
13090 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
130a0 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
130b0 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
130c0 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
130d0 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
130e0 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
130f0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
13100 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
13110 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
13120 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
13130 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
13140 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
13150 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
13160 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
13170 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
13180 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
13190 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
131a0 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
131b0 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
131c0 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
131d0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
131e0 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
131f0 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
13200 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
13210 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
13220 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
13230 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
13240 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
13250 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
13260 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
13270 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
13280 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
13290 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
132a0 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
132b0 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
132c0 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
132d0 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
132e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
132f0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
13300 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
13310 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
13320 74 20 6f 6e 20 50 35 20 74 68 65 6e 0a 2a 2a 20  t on P5 then.** 
13330 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
13340 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
13350 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
13360 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
13370 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
13380 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
13390 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
133a0 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
133b0 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
133c0 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
133d0 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
133e0 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
133f0 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
13400 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
13410 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
13420 20 7b 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20   {.  int p2;    
13430 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d          /* colum
13440 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72  n number to retr
13450 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ieve */.  VdbeCu
13460 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
13470 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13480 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
13490 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
134a0 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
134b0 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
134c0 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
134d0 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
134e0 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
134f0 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
13500 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
13510 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
13520 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
13530 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
13540 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
13550 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
13560 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
13570 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74   */.  Mem *pDest
13580 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72  ;        /* Wher
13590 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65  e to write the e
135a0 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a  xtracted value *
135b0 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  /.  Mem sMem;   
135c0 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
135d0 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
135e0 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
135f0 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44  /.  const u8 *zD
13600 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f  ata;   /* Part o
13610 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  f the record bei
13620 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
13630 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20  const u8 *zHdr; 
13640 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72     /* Next unpar
13650 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20  sed byte of the 
13660 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73  header */.  cons
13670 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f  t u8 *zEndHdr; /
13680 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72  * Pointer to fir
13690 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68  st byte after th
136a0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 36  e header */.  u6
136b0 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20  4 offset64;     
136c0 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65   /* 64-bit offse
136d0 74 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20  t */.  u32 t;   
136e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74            /* A t
136f0 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  ype code from th
13700 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
13710 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20  */.  Mem *pReg; 
13720 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64          /* Pseud
13730 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67  oTable input reg
13740 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d  ister */..  pC =
13750 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
13760 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  1];.  p2 = pOp->
13770 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  p2;..  /* If the
13780 20 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73   cursor cache is
13790 20 73 74 61 6c 65 20 28 6d 65 61 6e 69 6e 67 20   stale (meaning 
137a0 69 74 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  it is not curren
137b0 74 6c 79 20 70 6f 69 6e 74 20 61 74 0a 20 20 2a  tly point at.  *
137c0 2a 20 74 68 65 20 63 6f 72 72 65 63 74 20 72 6f  * the correct ro
137d0 77 29 20 74 68 65 6e 20 62 72 69 6e 67 20 69 74  w) then bring it
137e0 20 75 70 2d 74 6f 2d 64 61 74 65 20 62 79 20 64   up-to-date by d
137f0 6f 69 6e 67 20 74 68 65 20 6e 65 63 65 73 73 61  oing the necessa
13800 72 79 20 0a 20 20 2a 2a 20 42 2d 54 72 65 65 20  ry .  ** B-Tree 
13810 73 65 65 6b 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  seek. */.  rc = 
13820 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
13830 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32  rMoveto(&pC, &p2
13840 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
13850 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
13860 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74  error;..  assert
13870 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
13880 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
13890 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
138a0 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
138b0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
138c0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
138d0 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73  (p, pDest);.  as
138e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
138f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
13900 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
13910 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
13920 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46  ssert( p2<pC->nF
13930 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65  ield );.  aOffse
13940 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
13950 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
13960 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
13970 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72  _VTAB );.  asser
13980 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
13990 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20  =CURTYPE_PSEUDO 
139a0 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
139b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
139c0 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
139d0 45 5f 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69  E_SORTER );..  i
139e0 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
139f0 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us!=p->cacheCtr 
13a00 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
13a10 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
13a20 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
13a30 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
13a40 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  ){.      if( pC-
13a50 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
13a60 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20  PE_PSEUDO ){.   
13a70 20 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20       /* For the 
13a80 73 70 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20  special case of 
13a90 61 73 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  as pseudo-cursor
13aa0 2c 20 74 68 65 20 73 65 65 6b 52 65 73 75 6c 74  , the seekResult
13ab0 20 66 69 65 6c 64 0a 20 20 20 20 20 20 20 20 2a   field.        *
13ac0 2a 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  * identifies the
13ad0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68   register that h
13ae0 6f 6c 64 73 20 74 68 65 20 72 65 63 6f 72 64 20  olds the record 
13af0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
13b00 74 28 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  t( pC->seekResul
13b10 74 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70  t>0 );.        p
13b20 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
13b30 73 65 65 6b 52 65 73 75 6c 74 5d 3b 0a 20 20 20  seekResult];.   
13b40 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65       assert( pRe
13b50 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
13b60 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  lob );.        a
13b70 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
13b80 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20  d(pReg) );.     
13b90 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
13ba0 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d  ze = pC->szRow =
13bb0 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20   pReg->n;.      
13bc0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
13bd0 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20  *)pReg->z;.     
13be0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13bf0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13c00 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
13c10 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
13c20 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
13c30 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
13c40 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75     pCrsr = pC->u
13c50 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20  c.pCursor;.     
13c60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
13c70 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
13c80 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73  TREE );.      as
13c90 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
13ca0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
13cb0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
13cc0 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
13cd0 0a 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f  .      pC->paylo
13ce0 61 64 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  adSize = sqlite3
13cf0 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65  BtreePayloadSize
13d00 28 70 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70  (pCrsr);.      p
13d10 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65  C->aRow = sqlite
13d20 33 42 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74  3BtreePayloadFet
13d30 63 68 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 73  ch(pCrsr, &pC->s
13d40 7a 52 6f 77 29 3b 0a 20 20 20 20 20 20 61 73 73  zRow);.      ass
13d50 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d  ert( pC->szRow<=
13d60 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
13d70 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
13d80 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 36 35 35 33   pC->szRow<=6553
13d90 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d  6 );  /* Maximum
13da0 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34   page size is 64
13db0 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  KiB */.      if(
13dc0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13dd0 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   > (u32)db->aLim
13de0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
13df0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
13e00 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
13e10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
13e20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
13e30 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72  us = p->cacheCtr
13e40 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66  ;.    pC->iHdrOf
13e50 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74  fset = getVarint
13e60 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 61 4f 66  32(pC->aRow, aOf
13e70 66 73 65 74 5b 30 5d 29 3b 0a 20 20 20 20 70 43  fset[0]);.    pC
13e80 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30  ->nHdrParsed = 0
13e90 3b 0a 0a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  ;...    if( pC->
13ea0 73 7a 52 6f 77 3c 61 4f 66 66 73 65 74 5b 30 5d  szRow<aOffset[0]
13eb0 20 29 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d   ){      /*OPTIM
13ec0 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
13ed0 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e  */.      /* pC->
13ee0 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61  aRow does not ha
13ef0 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65  ve to hold the e
13f00 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69  ntire row, but i
13f10 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a  t does at least.
13f20 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f        ** need to
13f30 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
13f40 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  r of the record.
13f50 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f    If pC->aRow do
13f60 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20  es not contain. 
13f70 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70       ** the comp
13f80 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68 65  lete header, the
13f90 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f  n set it to zero
13fa0 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65  , forcing the he
13fb0 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20  ader to be.     
13fc0 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
13fd0 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20  allocated. */.  
13fe0 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
13ff0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f  ;.      pC->szRo
14000 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a  w = 0;..      /*
14010 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
14020 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
14030 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
14040 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
14050 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74  r..      ** Do t
14060 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
14070 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
14080 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
14090 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
140a0 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
140b0 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
140c0 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
140d0 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
140e0 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70  yte.      ** typ
140f0 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
14100 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
14110 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
14120 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
14130 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72        ** them, r
14140 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f  espectively.  So
14150 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61   the maximum hea
14160 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c  der length resul
14170 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20  ts from a.      
14180 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66  ** 3-byte type f
14190 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d  or each of the m
141a0 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20  aximum of 32768 
141b0 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72  columns plus thr
141c0 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72  ee.      ** extr
141d0 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20  a bytes for the 
141e0 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74  header length it
141f0 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b  self.  32768*3 +
14200 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20   3 = 98307..    
14210 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61    */.      if( a
14220 4f 66 66 73 65 74 5b 30 5d 20 3e 20 39 38 33 30  Offset[0] > 9830
14230 37 20 7c 7c 20 61 4f 66 66 73 65 74 5b 30 5d 20  7 || aOffset[0] 
14240 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
14250 65 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  e ){.        got
14260 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  o op_column_corr
14270 75 70 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  upt;.      }.   
14280 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
14290 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
142a0 6d 69 7a 61 74 69 6f 6e 2e 20 20 42 79 20 73 6b  mization.  By sk
142b0 69 70 70 69 6e 67 20 6f 76 65 72 20 74 68 65 20  ipping over the 
142c0 66 69 72 73 74 20 66 65 77 20 74 65 73 74 73 0a  first few tests.
142d0 20 20 20 20 20 20 2a 2a 20 28 65 78 3a 20 70 43        ** (ex: pC
142e0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
142f0 29 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65  ) in the next se
14300 63 74 69 6f 6e 2c 20 77 65 20 61 63 68 69 65 76  ction, we achiev
14310 65 20 61 0a 20 20 20 20 20 20 2a 2a 20 6d 65 61  e a.      ** mea
14320 73 75 72 61 62 6c 65 20 70 65 72 66 6f 72 6d 61  surable performa
14330 6e 63 65 20 67 61 69 6e 2e 0a 20 20 20 20 20 20  nce gain..      
14340 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 68 69 73  **.      ** This
14350 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e   branch is taken
14360 20 65 76 65 6e 20 69 66 20 61 4f 66 66 73 65 74   even if aOffset
14370 5b 30 5d 3d 3d 30 2e 20 20 53 75 63 68 20 61 20  [0]==0.  Such a 
14380 72 65 63 6f 72 64 20 69 73 20 6e 65 76 65 72 0a  record is never.
14390 20 20 20 20 20 20 2a 2a 20 67 65 6e 65 72 61 74        ** generat
143a0 65 64 20 62 79 20 53 51 4c 69 74 65 2c 20 61 6e  ed by SQLite, an
143b0 64 20 63 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69  d could be consi
143c0 64 65 72 65 64 20 63 6f 72 72 75 70 74 69 6f 6e  dered corruption
143d0 2c 20 62 75 74 20 77 65 0a 20 20 20 20 20 20 2a  , but we.      *
143e0 2a 20 61 63 63 65 70 74 20 69 74 20 66 6f 72 20  * accept it for 
143f0 68 69 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f  historical reaso
14400 6e 73 2e 20 20 57 68 65 6e 20 61 4f 66 66 73 65  ns.  When aOffse
14410 74 5b 30 5d 3d 3d 30 2c 20 74 68 65 20 63 6f 64  t[0]==0, the cod
14420 65 20 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20  e this.      ** 
14430 62 72 61 6e 63 68 20 6a 75 6d 70 73 20 74 6f 20  branch jumps to 
14440 72 65 61 64 73 20 70 61 73 74 20 74 68 65 20 65  reads past the e
14450 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14460 2c 20 62 75 74 20 6e 65 76 65 72 20 6d 6f 72 65  , but never more
14470 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 61  .      ** than a
14480 20 66 65 77 20 62 79 74 65 73 2e 20 20 45 76 65   few bytes.  Eve
14490 6e 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  n if the record 
144a0 6f 63 63 75 72 73 20 61 74 20 74 68 65 20 65 6e  occurs at the en
144b0 64 20 6f 66 20 74 68 65 20 70 61 67 65 0a 20 20  d of the page.  
144c0 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 61      ** content a
144d0 72 65 61 2c 20 74 68 65 20 22 70 61 67 65 20 68  rea, the "page h
144e0 65 61 64 65 72 22 20 63 6f 6d 65 73 20 61 66 74  eader" comes aft
144f0 65 72 20 74 68 65 20 70 61 67 65 20 63 6f 6e 74  er the page cont
14500 65 6e 74 20 61 6e 64 20 73 6f 0a 20 20 20 20 20  ent and so.     
14510 20 2a 2a 20 74 68 69 73 20 6f 76 65 72 72 65 61   ** this overrea
14520 64 20 69 73 20 68 61 72 6d 6c 65 73 73 2e 20 20  d is harmless.  
14530 53 69 6d 69 6c 61 72 20 6f 76 65 72 72 65 61 64  Similar overread
14540 73 20 63 61 6e 20 6f 63 63 75 72 20 66 6f 72 20  s can occur for 
14550 61 20 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20  a corrupt.      
14560 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
14570 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14580 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
14590 77 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  w;.      assert(
145a0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
145b0 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f  =p2 );         /
145c0 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b  * Conditional sk
145d0 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 74  ipped */.      t
145e0 65 73 74 63 61 73 65 28 20 61 4f 66 66 73 65 74  estcase( aOffset
145f0 5b 30 5d 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  [0]==0 );.      
14600 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  goto op_column_r
14610 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20  ead_header;.    
14620 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  }.  }..  /* Make
14630 20 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74   sure at least t
14640 68 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e  he first p2+1 en
14650 74 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61  tries of the hea
14660 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20  der have been.  
14670 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61  ** parsed and va
14680 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lid information 
14690 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20  is in aOffset[] 
146a0 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e  and pC->aType[].
146b0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e  .  */.  if( pC->
146c0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
146d0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
146e0 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72  e is more header
146f0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70   available for p
14700 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65  arsing in the re
14710 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a  cord, try.    **
14720 20 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69   to extract addi
14730 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70  tional fields up
14740 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b   through the p2+
14750 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20  1-th field .    
14760 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  */.    if( pC->i
14770 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65  HdrOffset<aOffse
14780 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t[0] ){.      /*
14790 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61   Make sure zData
147a0 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67   points to enoug
147b0 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  h of the record 
147c0 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
147d0 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  der. */.      if
147e0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
147f0 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28  .        memset(
14800 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
14810 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20  (sMem));.       
14820 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
14830 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
14840 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
14850 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d   aOffset[0], &sM
14860 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  em);.        if(
14870 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
14880 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14890 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
148a0 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73    zData = (u8*)s
148b0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  Mem.z;.      }el
148c0 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
148d0 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  a = pC->aRow;.  
148e0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
148f0 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54  * Fill in pC->aT
14900 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73  ype[i] and aOffs
14910 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72  et[i] values thr
14920 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66  ough the p2-th f
14930 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f  ield. */.    op_
14940 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
14950 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43  er:.      i = pC
14960 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20  ->nHdrParsed;.  
14970 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61      offset64 = a
14980 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20  Offset[i];.     
14990 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20   zHdr = zData + 
149a0 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a  pC->iHdrOffset;.
149b0 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20        zEndHdr = 
149c0 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b  zData + aOffset[
149d0 30 5d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61  0];.      testca
149e0 73 65 28 20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  se( zHdr>=zEndHd
149f0 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  r );.      do{. 
14a00 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d 20         if( (t = 
14a10 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b  zHdr[0])<0x80 ){
14a20 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b  .          zHdr+
14a30 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  +;.          off
14a40 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
14a50 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61  VdbeOneByteSeria
14a60 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
14a70 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14a80 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71        zHdr += sq
14a90 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
14aa0 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20  (zHdr, &t);.    
14ab0 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b        offset64 +
14ac0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
14ad0 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
14ae0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
14af0 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20   pC->aType[i++] 
14b00 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66  = t;.        aOf
14b10 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28  fset[i] = (u32)(
14b20 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66 66  offset64 & 0xfff
14b30 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77  fffff);.      }w
14b40 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a  hile( i<=p2 && z
14b50 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a  Hdr<zEndHdr );..
14b60 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63        /* The rec
14b70 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69  ord is corrupt i
14b80 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  f any of the fol
14b90 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a  lowing are true:
14ba0 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68  .      ** (1) th
14bb0 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68  e bytes of the h
14bc0 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73  eader extend pas
14bd0 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68  t the declared h
14be0 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20  eader size.     
14bf0 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69   ** (2) the enti
14c00 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73  re header was us
14c10 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64  ed but not all d
14c20 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20  ata was used.   
14c30 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e     ** (3) the en
14c40 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78  d of the data ex
14c50 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65  tends beyond the
14c60 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
14c70 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  rd..      */.   
14c80 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45     if( (zHdr>=zE
14c90 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a  ndHdr && (zHdr>z
14ca0 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74  EndHdr || offset
14cb0 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53  64!=pC->payloadS
14cc0 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20  ize)).       || 
14cd0 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e  (offset64 > pC->
14ce0 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
14cf0 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66     ){.        if
14d00 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20  ( aOffset[0]==0 
14d10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d  ){.          i =
14d20 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48   0;.          zH
14d30 64 72 20 3d 20 7a 45 6e 64 48 64 72 3b 0a 20 20  dr = zEndHdr;.  
14d40 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14d50 20 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61         if( pC->a
14d60 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
14d70 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
14d80 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20  sMem);.         
14d90 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
14da0 63 6f 72 72 75 70 74 3b 0a 20 20 20 20 20 20 20  corrupt;.       
14db0 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   }.      }..    
14dc0 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
14dd0 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = i;.      pC->
14de0 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33  iHdrOffset = (u3
14df0 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29  2)(zHdr - zData)
14e00 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
14e10 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65  aRow==0 ) sqlite
14e20 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
14e30 26 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73  &sMem);.    }els
14e40 65 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a  e{.      t = 0;.
14e50 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66      }..    /* If
14e60 20 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f   after trying to
14e70 20 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74   extract new ent
14e80 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65  ries from the he
14e90 61 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64  ader, nHdrParsed
14ea0 20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c   is.    ** still
14eb0 20 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74   not up to p2, t
14ec0 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74  hat means that t
14ed0 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65  he record has fe
14ee0 77 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20  wer than p2.    
14ef0 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20  ** columns.  So 
14f00 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20  the result will 
14f10 62 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65  be either the de
14f20 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61  fault value or a
14f30 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20   NULL..    */.  
14f40 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
14f50 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
14f60 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
14f70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
14f80 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
14f90 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
14fa0 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d  Dest, pOp->p4.pM
14fb0 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  em, MEM_Static);
14fc0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14fd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14fe0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
14ff0 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t);.      }.    
15000 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
15010 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  _out;.    }.  }e
15020 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d  lse{.    t = pC-
15030 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a  >aType[p2];.  }.
15040 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68  .  /* Extract th
15050 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  e content for th
15060 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e  e p2+1-th column
15070 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f  .  Control can o
15080 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74  nly.  ** reach t
15090 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66  his point if aOf
150a0 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65  fset[p2], aOffse
150b0 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d  t[p2+1], and pC-
150c0 3e 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20  >aType[p2] are. 
150d0 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20   ** all valid.. 
150e0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32   */.  assert( p2
150f0 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20  <pC->nHdrParsed 
15100 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
15110 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
15120 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
15130 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
15140 69 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a  iants(pDest) );.
15150 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
15160 61 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20  amic(pDest) ){. 
15170 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15180 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
15190 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74  .  }.  assert( t
151a0 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  ==pC->aType[p2] 
151b0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52  );.  if( pC->szR
151c0 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31  ow>=aOffset[p2+1
151d0 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ] ){.    /* This
151e0 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63   is the common c
151f0 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65  ase where the de
15200 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69  sired content fi
15210 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e  ts on the origin
15220 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d  al.    ** page -
15230 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65   where the conte
15240 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20  nt is not on an 
15250 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f  overflow page */
15260 0a 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d  .    zData = pC-
15270 3e 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b  >aRow + aOffset[
15280 70 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31  p2];.    if( t<1
15290 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
152a0 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
152b0 7a 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29  zData, t, pDest)
152c0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
152d0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c     /* If the col
152e0 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73  umn value is a s
152f0 74 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61  tring, we need a
15300 20 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75   persistent valu
15310 65 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  e, not.      ** 
15320 61 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75  a MEM_Ephem valu
15330 65 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20  e.  This branch 
15340 69 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d  is a fast short-
15350 63 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69  cut that is equi
15360 76 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20  valent.      ** 
15370 74 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  to calling sqlit
15380 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
15390 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62  ) and sqlite3Vdb
153a0 65 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28  eDeephemeralize(
153b0 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
153c0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
153d0 31 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d  16 aFlag[] = { M
153e0 45 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72  EM_Blob, MEM_Str
153f0 7c 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20  |MEM_Term };.   
15400 20 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65     pDest->n = le
15410 6e 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20  n = (t-12)/2;.  
15420 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d      pDest->enc =
15430 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20   encoding;.     
15440 20 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61   if( pDest->szMa
15450 6c 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a  lloc < len+2 ){.
15460 20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66          pDest->f
15470 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
15480 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
15490 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
154a0 70 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29  pDest, len+2, 0)
154b0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
154c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
154d0 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20       pDest->z = 
154e0 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a  pDest->zMalloc;.
154f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
15500 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a  mcpy(pDest->z, z
15510 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20  Data, len);.    
15520 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20    pDest->z[len] 
15530 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
15540 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a  ->z[len+1] = 0;.
15550 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
15560 67 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b  gs = aFlag[t&1];
15570 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
15580 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d      pDest->enc =
15590 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f   encoding;.    /
155a0 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61  * This branch ha
155b0 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20  ppens only when 
155c0 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76  content is on ov
155d0 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a  erflow pages */.
155e0 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70      if( ((pOp->p
155f0 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47  5 & (OPFLAG_LENG
15600 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50  THARG|OPFLAG_TYP
15610 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20  EOFARG))!=0.    
15620 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32        && ((t>=12
15630 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c   && (t&1)==0) ||
15640 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
15650 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30  AG_TYPEOFARG)!=0
15660 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20  )).     || (len 
15670 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
15680 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d  ialTypeLen(t))==
15690 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f  0.    ){.      /
156a0 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72  * Content is irr
156b0 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20  elevant for.    
156c0 20 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74    **    1. the t
156d0 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
156e0 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e  ,.      **    2.
156f0 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66   the length(X) f
15700 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20  unction if X is 
15710 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20  a blob, and.    
15720 20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68    **    3. if th
15730 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68  e content length
15740 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20   is zero..      
15750 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61  ** So we might a
15760 73 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73  s well use bogus
15770 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20   content rather 
15780 74 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20  than reading.   
15790 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72     ** content fr
157a0 6f 6d 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20  om disk. .      
157b0 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68  **.      ** Alth
157c0 6f 75 67 68 20 73 71 6c 69 74 65 33 56 64 62 65  ough sqlite3Vdbe
157d0 53 65 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20  SerialGet() may 
157e0 72 65 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62  read at most 8 b
157f0 79 74 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20  ytes from the.  
15800 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61      ** buffer pa
15810 73 73 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75  ssed to it, debu
15820 67 67 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56  gging function V
15830 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
15840 74 28 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a  t() may.      **
15850 20 72 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20   read up to 16. 
15860 53 6f 20 31 36 20 62 79 74 65 73 20 6f 66 20 62  So 16 bytes of b
15870 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20  ogus content is 
15880 73 75 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20  supplied..      
15890 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
158a0 75 38 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f  u8 aZero[16];  /
158b0 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6f  * This is the bo
158c0 67 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20  gus content */. 
158d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
158e0 53 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c  SerialGet(aZero,
158f0 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
15900 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
15910 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
15920 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63  FromBtree(pC->uc
15930 2e 70 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65  .pCursor, aOffse
15940 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73  t[p2], len, pDes
15950 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
15960 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
15970 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
15980 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c  error;.      sql
15990 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
159a0 74 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65  t((const u8*)pDe
159b0 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29  st->z, t, pDest)
159c0 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66  ;.      pDest->f
159d0 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68  lags &= ~MEM_Eph
159e0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f  em;.    }.  }..o
159f0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20  p_column_out:.  
15a00 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
15a10 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45  IZE(pDest);.  RE
15a20 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15a30 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
15a40 62 72 65 61 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d  break;..op_colum
15a50 6e 5f 63 6f 72 72 75 70 74 3a 0a 20 20 69 66 28  n_corrupt:.  if(
15a60 20 61 4f 70 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a   aOp[0].p3>0 ){.
15a70 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 61      pOp = &aOp[a
15a80 4f 70 5b 30 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20  Op[0].p3-1];.   
15a90 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b   break;.  }else{
15aa0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
15ab0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
15ac0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
15ad0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
15ae0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
15af0 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
15b00 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
15b10 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50   affinity(r[P1@P
15b20 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  2]).**.** Apply 
15b30 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
15b40 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
15b50 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
15b60 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
15b70 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
15b80 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
15b90 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 4e 2d 74  rs long. The N-t
15ba0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
15bb0 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
15bc0 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
15bd0 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
15be0 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
15bf0 6f 72 20 74 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d  or the N-th.** m
15c00 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
15c10 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
15c20 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
15c30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
15c40 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
15c50 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
15c60 20 61 70 70 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a   applied */..  z
15c70 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
15c80 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
15c90 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
15ca0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
15cb0 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
15cc0 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e   zAffinity[pOp->
15cd0 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  p2]==0 );.  pIn1
15ce0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
15cf0 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  ];.  do{.    ass
15d00 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d  ert( pIn1 <= &p-
15d10 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31  >aMem[(p->nMem+1
15d20 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20   - p->nCursor)] 
15d30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
15d40 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
15d50 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  );.    applyAffi
15d60 6e 69 74 79 28 70 49 6e 31 2c 20 2a 28 7a 41 66  nity(pIn1, *(zAf
15d70 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
15d80 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
15d90 3b 0a 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66  ;.  }while( zAff
15da0 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 62 72  inity[0] );.  br
15db0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
15dc0 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31  e: MakeRecord P1
15dd0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
15de0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d  ynopsis: r[P3]=m
15df0 6b 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a  krec(r[P1@P2]).*
15e00 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20  *.** Convert P2 
15e10 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e  registers beginn
15e20 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f  ing with P1 into
15e30 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72   the [record for
15e40 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61  mat].** use as a
15e50 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20   data record in 
15e60 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  a database table
15e70 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20   or as a key.** 
15e80 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68  in an index.  Th
15e90 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
15ea0 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68  de can decode th
15eb0 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a  e record later..
15ec0 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
15ed0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
15ee0 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
15ef0 6f 6e 67 2e 20 20 54 68 65 20 4e 2d 74 68 20 63  ong.  The N-th c
15f00 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
15f10 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
15f20 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
15f30 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
15f40 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
15f50 74 68 65 20 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c  the N-th.** fiel
15f60 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
15f70 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
15f80 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
15f90 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
15fa0 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
15fb0 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
15fc0 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
15fd0 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
15fe0 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
15ff0 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
16000 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
16010 65 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e  e affinity BLOB.
16020 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
16030 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a  Record: {.  u8 *
16040 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20  zNewRecord;     
16050 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74     /* A buffer t
16060 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
16070 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
16080 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  rd */.  Mem *pRe
16090 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
160a0 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * The new record
160b0 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b   */.  u64 nData;
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
160d0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
160e0 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
160f0 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20  .  int nHdr;    
16100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16110 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
16120 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
16130 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20    i64 nByte;    
16140 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
16150 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
16160 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20  for this record 
16170 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20  */.  i64 nZero; 
16180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16190 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
161a0 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
161b0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
161c0 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20    int nVarint;  
161d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
161e0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
161f0 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32   varint */.  u32
16200 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20   serial_type;   
16210 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c      /* Type fiel
16220 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74  d */.  Mem *pDat
16230 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  a0;           /*
16240 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20   First field to 
16250 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  be combined into
16260 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16270 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20   Mem *pLast;    
16280 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
16290 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63  field of the rec
162a0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ord */.  int nFi
162b0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eld;            
162c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
162d0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
162e0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
162f0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a  finity;       /*
16300 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74   The affinity st
16310 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63  ring for the rec
16320 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c  ord */.  int fil
16330 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20  e_format;       
16340 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74  /* File format t
16350 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69  o use for encodi
16360 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  ng */.  int i;  
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16380 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
16390 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61  zNewRecord[] hea
163a0 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  der */.  int j; 
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
163d0 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f   zNewRecord[] co
163e0 6e 74 65 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6c  ntent */.  u32 l
163f0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
16400 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61    /* Length of a
16410 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20   field */..  /* 
16420 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63  Assuming the rec
16430 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66  ord contains N f
16440 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72  ields, the recor
16450 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20  d format looks. 
16460 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20   ** like this:. 
16470 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   **.  ** -------
16480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
164a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
164b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
164c0 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a  -.  ** | hdr-siz
164d0 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70  e | type 0 | typ
164e0 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65  e 1 | ... | type
164f0 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e   N-1 | data0 | .
16500 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20  .. | data N-1 | 
16510 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
16520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16530 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16550 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
16560 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29   **.  ** Data(0)
16570 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72   is taken from r
16580 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74  egister P1.  Dat
16590 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20  a(1) comes from 
165a0 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20  register P1+1.  
165b0 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  ** and so forth.
165c0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20  .  **.  ** Each 
165d0 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20  type field is a 
165e0 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74  varint represent
165f0 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74  ing the serial t
16600 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  ype of the .  **
16610 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64   corresponding d
16620 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65  ata element (see
16630 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16640 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20  alType()). The. 
16650 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65   ** hdr-size fie
16660 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72  ld is also a var
16670 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
16680 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
16690 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20   beginning.  ** 
166a0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
166b0 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e   data0..  */.  n
166c0 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20  Data = 0;       
166d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
166e0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
166f0 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30  ce */.  nHdr = 0
16700 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
16710 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
16720 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
16730 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20  .  nZero = 0;   
16740 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16750 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
16760 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
16770 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65  record */.  nFie
16780 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  ld = pOp->p1;.  
16790 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
167a0 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
167b0 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70   nField>0 && pOp
167c0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
167d0 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d  2+nField<=(p->nM
167e0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
167f0 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  r)+1 );.  pData0
16800 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
16810 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
16820 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
16830 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
16840 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
16850 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
16860 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
16870 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74  Identify the out
16880 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
16890 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
168a0 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
168b0 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
168c0 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
168d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
168e0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
168f0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
16900 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72    /* Apply the r
16910 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74  equested affinit
16920 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a  y to all inputs.
16930 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
16940 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
16950 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
16960 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44  ){.    pRec = pD
16970 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20  ata0;.    do{.  
16980 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
16990 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66  y(pRec++, *(zAff
169a0 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69  inity++), encodi
169b0 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ng);.      asser
169c0 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d  t( zAffinity[0]=
169d0 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73  =0 || pRec<=pLas
169e0 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28  t );.    }while(
169f0 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b   zAffinity[0] );
16a00 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
16a10 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f  ITE_ENABLE_NULL_
16a20 54 52 49 4d 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20  TRIM.  /* NULLs 
16a30 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20 74 72  can be safely tr
16a40 69 6d 6d 65 64 20 66 72 6f 6d 20 74 68 65 20 65  immed from the e
16a50 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
16a60 2c 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 2a  , as long as.  *
16a70 2a 20 61 73 20 74 68 65 20 73 63 68 65 6d 61 20  * as the schema 
16a80 66 6f 72 6d 61 74 20 69 73 20 32 20 6f 72 20 6d  format is 2 or m
16a90 6f 72 65 20 61 6e 64 20 6e 6f 6e 65 20 6f 66 20  ore and none of 
16aa0 74 68 65 20 6f 6d 69 74 74 65 64 20 63 6f 6c 75  the omitted colu
16ab0 6d 6e 73 0a 20 20 2a 2a 20 68 61 76 65 20 61 20  mns.  ** have a 
16ac0 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74  non-NULL default
16ad0 20 76 61 6c 75 65 2e 20 20 41 6c 73 6f 2c 20 74   value.  Also, t
16ae0 68 65 20 72 65 63 6f 72 64 20 6d 75 73 74 20 62  he record must b
16af0 65 20 6c 65 66 74 20 77 69 74 68 0a 20 20 2a 2a  e left with.  **
16b00 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 66 69   at least one fi
16b10 65 6c 64 2e 20 20 49 66 20 50 35 3e 30 20 74 68  eld.  If P5>0 th
16b20 65 6e 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 6e  en it will be on
16b30 65 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 0a  e more than the.
16b40 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68    ** index of th
16b50 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 6f 6c  e right-most col
16b60 75 6d 6e 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e  umn with a non-N
16b70 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ULL default valu
16b80 65 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e */.  if( pOp->
16b90 70 35 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28  p5 ){.    while(
16ba0 20 28 70 4c 61 73 74 2d 3e 66 6c 61 67 73 20 26   (pLast->flags &
16bb0 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 26 26   MEM_Null)!=0 &&
16bc0 20 6e 46 69 65 6c 64 3e 70 4f 70 2d 3e 70 35 20   nField>pOp->p5 
16bd0 29 7b 0a 20 20 20 20 20 20 70 4c 61 73 74 2d 2d  ){.      pLast--
16be0 3b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 2d 2d  ;.      nField--
16bf0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
16c00 69 66 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68  if..  /* Loop th
16c10 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
16c20 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
16c30 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
16c40 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
16c50 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
16c60 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
16c70 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
16c80 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20  ..  */.  pRec = 
16c90 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20  pLast;.  do{.   
16ca0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
16cb0 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
16cc0 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73   pRec->uTemp = s
16cd0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
16ce0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
16cf0 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
16d00 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20  rmat, &len);.   
16d10 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
16d20 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
16d30 20 20 20 20 20 69 66 28 20 6e 44 61 74 61 20 29       if( nData )
16d40 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  {.        if( sq
16d50 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
16d60 6e 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67  ndBlob(pRec) ) g
16d70 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
16d80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16d90 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
16da0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20  u.nZero;.       
16db0 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e   len -= pRec->u.
16dc0 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20  nZero;.      }. 
16dd0 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b     }.    nData +
16de0 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63  = len;.    testc
16df0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
16e00 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73  ==127 );.    tes
16e10 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
16e20 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e  pe==128 );.    n
16e30 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79  Hdr += serial_ty
16e40 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71  pe<=127 ? 1 : sq
16e50 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
16e60 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
16e70 20 69 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61   if( pRec==pData
16e80 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
16e90 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28  Rec--;.  }while(
16ea0 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e  1);..  /* EVIDEN
16eb0 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31  CE-OF: R-22564-1
16ec0 31 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20  1647 The header 
16ed0 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69  begins with a si
16ee0 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  ngle varint.  **
16ef0 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65   which determine
16f00 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
16f10 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
16f20 68 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76  he header. The v
16f30 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65  arint.  ** value
16f40 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
16f50 74 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79  the header in by
16f60 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  tes including th
16f70 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20  e size varint.  
16f80 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20  ** itself. */.  
16f90 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
16fa0 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73  126 );.  testcas
16fb0 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a  e( nHdr==127 );.
16fc0 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20    if( nHdr<=126 
16fd0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f  ){.    /* The co
16fe0 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20  mmon case */.   
16ff0 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65   nHdr += 1;.  }e
17000 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65  lse{.    /* Rare
17010 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c   case of a reall
17020 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a  y large header *
17030 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20  /.    nVarint = 
17040 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
17050 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72  (nHdr);.    nHdr
17060 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20   += nVarint;.   
17070 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
17080 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
17090 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20  dr) ) nHdr++;.  
170a0 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
170b0 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42  +nData;.  if( nB
170c0 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c  yte+nZero>db->aL
170d0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
170e0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
170f0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
17100 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
17110 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
17120 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
17130 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
17140 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
17150 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
17160 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
17170 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
17180 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
17190 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
171a0 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
171b0 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
171c0 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
171d0 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
171e0 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
171f0 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62  ize() could clob
17200 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65  ber the value be
17210 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29  fore it is used)
17220 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
17230 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
17240 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20  AndResize(pOut, 
17250 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20  (int)nByte) ){. 
17260 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
17270 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64    }.  zNewRecord
17280 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
17290 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68  ;..  /* Write th
172a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20  e record */.  i 
172b0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e  = putVarint32(zN
172c0 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b  ewRecord, nHdr);
172d0 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61  .  j = nHdr;.  a
172e0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
172f0 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d  Last );.  pRec =
17300 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20   pData0;.  do{. 
17310 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
17320 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20   pRec->uTemp;.  
17330 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
17340 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20  : R-06529-47362 
17350 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69  Following the si
17360 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e  ze varint are on
17370 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a  e or more.    **
17380 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69   additional vari
17390 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c  nts, one per col
173a0 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  umn. */.    i +=
173b0 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e   putVarint32(&zN
173c0 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72  ewRecord[i], ser
173d0 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20  ial_type);      
173e0 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
173f0 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45  type */.    /* E
17400 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34  VIDENCE-OF: R-64
17410 35 33 36 2d 35 31 37 32 38 20 54 68 65 20 76 61  536-51728 The va
17420 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f  lues for each co
17430 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f  lumn in the reco
17440 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69  rd.    ** immedi
17450 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65  ately follow the
17460 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20   header. */.    
17470 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  j += sqlite3Vdbe
17480 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
17490 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20  ecord[j], pRec, 
174a0 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a  serial_type); /*
174b0 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77   content */.  }w
174c0 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d  hile( (++pRec)<=
174d0 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72  pLast );.  asser
174e0 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20  t( i==nHdr );.  
174f0 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65  assert( j==nByte
17500 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
17510 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
17520 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
17530 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
17540 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
17550 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
17560 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
17570 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  b;.  if( nZero )
17580 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
17590 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
175a0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
175b0 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
175c0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
175d0 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
175e0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
175f0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
17600 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17610 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
17620 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
17630 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a  : r[P2]=count().
17640 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
17650 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
17660 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
17670 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
17680 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
17690 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
176a0 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
176b0 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
176c0 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
176d0 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
176e0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
176f0 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45  out2 */.  i64 nE
17700 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
17710 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73 65   *pCrsr;..  asse
17720 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
17730 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d  ->p1]->eCurType=
17740 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
17750 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ;.  pCrsr = p->a
17760 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75  pCsr[pOp->p1]->u
17770 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
17780 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
17790 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
177a0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
177b0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
177c0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
177d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
177e0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
177f0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66 28 20  &nEntry);.  if( 
17800 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
17810 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17820 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
17830 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
17840 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
17850 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
17860 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
17870 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
17880 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
17890 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
178a0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
178b0 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
178c0 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
178d0 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
178e0 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
178f0 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
17900 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
17910 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
17920 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
17930 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
17940 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
17950 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
17960 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
17970 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
17980 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
17990 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
179a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
179b0 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
179c0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
179d0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
179e0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
179f0 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
17a00 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
17a10 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
17a20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
17a30 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
17a40 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
17a50 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
17a60 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
17a70 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
17a80 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
17a90 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
17aa0 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
17ab0 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
17ac0 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
17ad0 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
17ae0 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
17af0 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
17b00 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
17b10 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
17b20 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
17b30 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
17b40 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
17b50 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17b60 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
17b70 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
17b80 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
17b90 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
17ba0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
17bb0 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
17bc0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
17bd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
17be0 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
17bf0 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
17c00 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
17c10 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
17c20 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
17c30 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
17c40 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
17c50 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
17c60 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
17c70 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
17c80 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
17c90 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
17ca0 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
17cb0 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
17cc0 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
17cd0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
17ce0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
17cf0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
17d00 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69  not open savepoi
17d10 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  nt - SQL stateme
17d20 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17d30 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
17d40 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
17d50 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
17d60 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
17d70 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66  n30(zName);..#if
17d80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
17d90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
17da0 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c      /* This call
17db0 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74   is Ok even if t
17dc0 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73  his savepoint is
17dd0 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e   actually a tran
17de0 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  saction.      **
17df0 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20   savepoint (and 
17e00 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64  therefore should
17e10 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76   not prompt xSav
17e20 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61  epoint()) callba
17e30 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66  cks..      ** If
17e40 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
17e50 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
17e60 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69   being opened, i
17e70 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a  t is guaranteed.
17e80 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
17e90 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20  e db->aVTrans[] 
17ea0 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20  array is empty. 
17eb0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
17ec0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
17ed0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61  ==0 || db->nVTra
17ee0 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72  ns==0 );.      r
17ef0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
17f00 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
17f10 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20  EPOINT_BEGIN,.  
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
17f40 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d  ->nStatement+db-
17f50 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20  >nSavepoint);.  
17f60 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17f70 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17f80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17f90 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f  .#endif..      /
17fa0 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
17fb0 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
17fc0 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
17fd0 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
17fe0 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a  locRawNN(db, siz
17ff0 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
18000 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
18010 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
18020 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
18030 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
18040 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
18050 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
18060 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
18070 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
18080 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
18090 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
180a0 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
180b0 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
180c0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
180d0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
180e0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
180f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
18100 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
18110 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
18120 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
18130 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
18140 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
18150 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18160 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
18170 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  t++;.        }..
18180 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
18190 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
181a0 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
181b0 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
181c0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
181d0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
181e0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
181f0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
18200 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
18210 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
18220 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
18230 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
18240 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
18250 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  redImmCons = db-
18260 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18270 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
18280 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
18290 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
182a0 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
182b0 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
182c0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
182d0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
182e0 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
182f0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
18300 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
18310 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
18320 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
18330 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
18340 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
18350 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
18360 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
18370 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
18380 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
18390 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
183a0 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
183b0 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
183c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
183d0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
183e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
183f0 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73  or(p, "no such s
18400 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a  avepoint: %s", z
18410 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20  Name);.      rc 
18420 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
18430 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
18440 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26  ->nVdbeWrite>0 &
18450 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
18460 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
18470 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
18480 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
18490 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
184a0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
184b0 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
184c0 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
184d0 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a  ments..      */.
184e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
184f0 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
18500 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f  t release savepo
18510 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20  int - ".        
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
18540 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
18550 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18560 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
18570 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
18580 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
18590 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
185a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
185b0 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
185c0 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
185d0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
185e0 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
185f0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
18600 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
18610 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
18620 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
18630 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
18640 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
18650 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
18660 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
18670 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
18680 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
18690 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
186a0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
186b0 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
186c0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
186d0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
186e0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
186f0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18700 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18710 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18720 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
18730 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
18740 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
18750 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
18760 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
18770 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20   aOp);.         
18780 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
18790 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 0;.          p
187a0 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
187b0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
187c0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
187d0 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
187e0 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
187f0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
18800 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72  t = 0;.        r
18810 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20  c = p->rc;.     
18820 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
18830 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e  int isSchemaChan
18840 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76  ge;.        iSav
18850 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
18860 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
18870 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
18880 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18890 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
188a0 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
188b0 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e  maChange = (db->
188c0 6d 44 62 46 6c 61 67 73 20 26 20 44 42 46 4c 41  mDbFlags & DBFLA
188d0 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 29 21  G_SchemaChange)!
188e0 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  =0;.          fo
188f0 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
18900 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
18910 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
18920 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43  te3BtreeTripAllC
18930 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69  ursors(db->aDb[i
18940 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20  i].pBt,.        
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
18970 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
18980 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20  BACK,.          
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53               isS
189b0 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b  chemaChange==0);
189c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
189d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
189e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
189f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
18a00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
18a10 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
18a20 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
18a30 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
18a40 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
18a50 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
18a60 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
18a70 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
18a80 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
18a90 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
18aa0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
18ab0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18ac0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
18ad0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18ae0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18af0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18b00 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   }.        if( i
18b10 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b  sSchemaChange ){
18b20 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
18b30 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
18b40 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
18b50 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
18b60 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
18b70 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
18b80 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
18b90 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c  mDbFlags |= DBFL
18ba0 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b  AG_SchemaChange;
18bb0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18bc0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
18bd0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
18be0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
18bf0 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
18c00 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
18c10 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
18c20 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
18c30 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
18c40 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
18c50 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
18c60 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
18c70 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
18c80 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
18c90 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
18ca0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
18cb0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
18cc0 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
18cd0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
18ce0 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
18cf0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
18d00 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
18d10 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
18d20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
18d30 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
18d40 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
18d50 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
18d60 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
18d70 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
18d80 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
18d90 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
18da0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
18db0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
18dc0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
18dd0 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
18de0 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
18df0 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
18e00 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
18e10 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
18e20 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
18e30 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
18e40 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
18e50 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
18e60 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
18e70 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
18e80 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
18e90 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
18ea0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
18eb0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
18ec0 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
18ed0 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
18ee0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
18ef0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
18f00 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
18f10 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
18f20 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
18f30 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
18f40 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
18f50 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
18f60 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
18f70 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
18f80 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18f90 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
18fa0 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f  on || p1==SAVEPO
18fb0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
18fc0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
18fd0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
18fe0 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
18ff0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
19000 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19010 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
19020 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
19030 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
19040 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
19050 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19060 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
19070 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
19080 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
19090 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
190a0 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
190b0 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
190c0 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
190d0 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
190e0 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
190f0 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
19100 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
19110 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
19120 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
19130 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
19140 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
19150 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
19160 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
19170 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
19180 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
19190 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
191a0 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
191b0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
191c0 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
191d0 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
191e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
191f0 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
19200 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19210 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
19220 63 6b 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  ck;..  desiredAu
19230 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
19240 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
19250 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
19260 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
19270 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
19280 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
19290 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
192a0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
192b0 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
192c0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
192d0 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
192e0 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
192f0 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
19300 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
19310 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
19320 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73  er );..  if( des
19330 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
19340 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
19350 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
19360 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
19370 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
19380 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
19390 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
193a0 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
193b0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
193c0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
193d0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
193e0 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
193f0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64  dAutoCommit && d
19400 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
19410 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
19420 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
19430 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
19440 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
19450 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
19460 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
19470 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
19480 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
19490 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
194a0 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20  te first. .     
194b0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
194c0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
194d0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
194e0 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
19510 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
19520 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
19530 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
19540 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19550 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19560 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
19570 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
19580 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
19590 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
195a0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
195b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
195c0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
195d0 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
195e0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a  toCommit;.    }.
195f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
19600 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
19610 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
19620 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
19630 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
19640 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
19650 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
19660 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
19670 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
19680 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
19690 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
196a0 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  urn;.    }.    a
196b0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
196c0 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
196d0 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
196e0 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
196f0 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
19700 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
19710 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
19720 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19730 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
19740 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
19750 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
19760 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
19770 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
19780 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
19790 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
197a0 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
197b0 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
197c0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
197d0 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
197e0 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
197f0 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
19800 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
19810 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
19820 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
19830 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
19840 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
19850 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
19860 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
19870 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RROR;.    goto a
19880 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19890 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  r;.  }.  break;.
198a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
198b0 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
198c0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
198d0 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
198e0 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50  on on database P
198f0 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69  1 if a transacti
19900 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  on is not alread
19910 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20  y.** active..** 
19920 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
19930 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
19940 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
19950 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20  tarted, or if a 
19960 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63  .** read-transac
19970 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20  tion is already 
19980 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70  active, it is up
19990 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74  graded to a writ
199a0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  e-transaction..*
199b0 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
199c0 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61   then a read-tra
199d0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
199e0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ted..**.** P1 is
199f0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
19a00 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
19a10 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
19a20 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
19a30 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
19a40 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
19a50 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
19a60 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
19a70 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
19a80 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
19a90 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
19aa0 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
19ab0 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
19ac0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
19ad0 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
19ae0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
19af0 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
19b00 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
19b10 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
19b20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
19b30 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
19b40 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
19b50 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
19b60 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
19b70 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
19b80 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
19b90 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
19ba0 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
19bb0 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
19bc0 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
19bd0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
19be0 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
19bf0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
19c00 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
19c10 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
19c20 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
19c30 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
19c40 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
19c50 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
19c60 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
19c70 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20  ows the changes 
19c80 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20  made by this.** 
19c90 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
19ca0 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
19cb0 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
19cc0 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
19cd0 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
19ce0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
19cf0 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
19d00 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
19d10 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
19d20 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
19d30 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
19d40 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
19d50 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  lts..**.** If P5
19d60 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70  !=0 then this op
19d70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73  code also checks
19d80 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
19d90 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a  ie against P3.**
19da0 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20   and the schema 
19db0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
19dc0 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a  er against P4..*
19dd0 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61  * The cookie cha
19de0 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77  nges its value w
19df0 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
19e00 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
19e10 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ges..** This ope
19e20 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  ration is used t
19e30 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68  o detect when th
19e40 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61  at the cookie ha
19e50 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64  s changed.** and
19e60 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e   that the curren
19e70 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20  t process needs 
19e80 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63  to reread the sc
19e90 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63  hema.  If the sc
19ea0 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69  hema.** cookie i
19eb0 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f  n P3 differs fro
19ec0 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  m the schema coo
19ed0 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  kie in the datab
19ee0 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a  ase header or.**
19ef0 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67   if the schema g
19f00 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
19f10 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20  r in P4 differs 
19f20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
19f30 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  .** generation c
19f40 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20  ounter, then an 
19f50 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72  SQLITE_SCHEMA er
19f60 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e  ror is raised an
19f70 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68  d execution.** h
19f80 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74  alts.  The sqlit
19f90 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65  e3_step() wrappe
19fa0 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74  r function might
19fb0 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20   then reprepare 
19fc0 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  the.** statement
19fd0 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72   and rerun it fr
19fe0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
19ff0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
1a000 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74  nsaction: {.  Bt
1a010 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20  ree *pBt;.  int 
1a020 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65  iMeta;.  int iGe
1a030 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  n;..  assert( p-
1a040 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1a050 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1a060 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  nly==0 || pOp->p
1a070 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  2==0 );.  assert
1a080 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1a090 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
1a0a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1a0b0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1a0c0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
1a0d0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
1a0e0 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
1a0f0 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
1a100 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
1a110 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
1a120 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1a130 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a140 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
1a150 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
1a160 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
1a170 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a180 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1a190 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
1a1a0 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
1a1b0 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50  SQLITE_BUSY_SNAP
1a1c0 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74  SHOT );.    test
1a1d0 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
1a1e0 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29  _BUSY_RECOVERY )
1a1f0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1a200 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1a210 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
1a220 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
1a230 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28         p->pc = (
1a240 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
1a250 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
1a260 20 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74   rc;.        got
1a270 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1a280 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
1a290 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a2a0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
1a2b0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
1a2c0 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
1a2d0 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
1a2e0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
1a2f0 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
1a300 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
1a310 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1a320 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
1a330 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
1a340 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
1a350 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
1a360 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
1a370 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
1a380 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
1a390 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
1a3a0 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
1a3b0 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
1a3c0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
1a3d0 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
1a3e0 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
1a3f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
1a400 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
1a410 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
1a420 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
1a430 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
1a440 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1a450 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a460 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
1a470 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
1a480 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
1a490 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
1a4a0 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
1a4b0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1a4c0 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
1a4d0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
1a4e0 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
1a4f0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1a500 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
1a510 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
1a520 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
1a530 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1a540 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
1a550 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
1a560 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
1a570 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
1a580 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
1a590 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
1a5a0 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
1a5b0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1a5c0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47  .    }..    /* G
1a5d0 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61  ather the schema
1a5e0 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
1a5f0 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20  for checking:.  
1a600 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
1a610 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d  ION-OF: R-03189-
1a620 35 31 31 33 35 20 41 73 20 65 61 63 68 20 53 51  51135 As each SQ
1a630 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73  L statement runs
1a640 2c 20 74 68 65 20 73 63 68 65 6d 61 0a 20 20 20  , the schema.   
1a650 20 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73 20 63   ** version is c
1a660 68 65 63 6b 65 64 20 74 6f 20 65 6e 73 75 72 65  hecked to ensure
1a670 20 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61   that the schema
1a680 20 68 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64   has not changed
1a690 20 73 69 6e 63 65 20 74 68 65 0a 20 20 20 20 2a   since the.    *
1a6a0 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  * SQL statement 
1a6b0 77 61 73 20 70 72 65 70 61 72 65 64 2e 0a 20 20  was prepared..  
1a6c0 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
1a6d0 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
1a6e0 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
1a6f0 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
1a700 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
1a710 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
1a720 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
1a730 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
1a740 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
1a750 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
1a760 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1a770 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
1a780 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1a790 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
1a7a0 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
1a7b0 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
1a7c0 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
1a7d0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
1a7e0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
1a7f0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
1a800 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
1a810 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
1a820 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
1a830 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
1a840 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
1a850 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a860 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
1a870 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
1a880 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
1a890 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
1a8a0 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
1a8b0 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
1a8c0 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
1a8d0 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
1a8e0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
1a8f0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
1a900 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
1a910 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
1a920 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
1a930 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
1a940 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
1a950 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
1a960 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
1a970 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
1a980 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
1a990 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
1a9a0 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
1a9b0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
1a9c0 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
1a9d0 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
1a9e0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
1a9f0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
1aa00 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
1aa10 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
1aa20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1aa30 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
1aa40 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
1aa50 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
1aa60 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
1aa70 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
1aa80 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
1aa90 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
1aaa0 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
1aab0 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
1aac0 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
1aad0 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
1aae0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
1aaf0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
1ab00 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
1ab10 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
1ab20 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
1ab30 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
1ab40 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
1ab50 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1ab60 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
1ab70 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
1ab80 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
1ab90 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
1aba0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1abb0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1abc0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1abd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1abe0 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
1abf0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
1ac00 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
1ac10 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
1ac20 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
1ac30 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
1ac40 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
1ac50 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1ac60 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
1ac70 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1ac80 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
1ac90 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1aca0 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
1acb0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1acc0 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
1acd0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1ace0 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1acf0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1ad00 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1ad10 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1ad20 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
1ad30 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
1ad40 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
1ad50 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
1ad60 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
1ad70 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
1ad80 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
1ad90 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
1ada0 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
1adb0 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1adc0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1add0 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1adf0 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
1ae00 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
1ae10 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
1ae20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1ae30 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
1ae40 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
1ae50 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1ae60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ae70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
1ae80 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1ae90 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1aea0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1aeb0 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
1aec0 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
1aed0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1aee0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1aef0 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74  iDb) );..  sqlit
1af00 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
1af10 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1af20 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
1af30 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
1af40 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
1af50 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
1af60 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
1af70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1af80 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
1af90 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1afa0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e  .** Write the in
1afb0 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 20 69  teger value P3 i
1afc0 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
1afd0 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
1afe0 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73   P1..** P2==1 is
1aff0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1b000 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74  ion.  P2==2 is t
1b010 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1b020 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20  at..** P2==3 is 
1b030 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1b040 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1b050 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1b060 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1b070 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1b080 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1b090 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1b0a0 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1b0b0 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1b0c0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1b0d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1b0e0 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1b0f0 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1b100 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1b110 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1b120 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  {.  Db *pDb;.  a
1b130 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
1b140 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1b150 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1b160 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1b170 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1b180 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1b190 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1b1a0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1b1b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1b1c0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
1b1d0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
1b1e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1b1f0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
1b200 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1b210 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1b220 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
1b230 20 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74   );.  /* See not
1b240 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
1b250 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
1b260 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
1b270 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
1b280 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
1b290 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d  t, pOp->p2, pOp-
1b2a0 3e 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  >p3);.  if( pOp-
1b2b0 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
1b2c0 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
1b2d0 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
1b2e0 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
1b2f0 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
1b300 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
1b310 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
1b320 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
1b330 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  _cookie = pOp->p
1b340 33 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c  3;.    db->mDbFl
1b350 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63  ags |= DBFLAG_Sc
1b360 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65  hemaChange;.  }e
1b370 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
1b380 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
1b390 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
1b3a0 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
1b3b0 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
1b3c0 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
1b3d0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1b3e0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20  = pOp->p3;.  }. 
1b3f0 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20   if( pOp->p1==1 
1b400 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69  ){.    /* Invali
1b410 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65  date all prepare
1b420 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  d statements whe
1b430 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64  never the TEMP d
1b440 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73  atabase.    ** s
1b450 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64  chema is changed
1b460 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20  .  Ticket #1644 
1b470 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  */.    sqlite3Ex
1b480 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
1b490 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
1b4a0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
1b4b0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1b4c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b4d0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1b4e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1b4f0 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
1b500 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1b510 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1b520 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1b530 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72  read-only cursor
1b540 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
1b550 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f  e table whose ro
1b560 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32  ot page is.** P2
1b570 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66   in a database f
1b580 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61  ile.  The databa
1b590 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72  se file is deter
1b5a0 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a  mined by P3. .**
1b5b0 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65   P3==0 means the
1b5c0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
1b5d0 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20  P3==1 means the 
1b5e0 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
1b5f0 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  r .** temporary 
1b600 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31  tables, and P3>1
1b610 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20   means used the 
1b620 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74  corresponding at
1b630 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61  tached.** databa
1b640 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65  se.  Give the ne
1b650 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e  w cursor an iden
1b660 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54  tifier of P1.  T
1b670 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20  he P1.** values 
1b680 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74  need not be cont
1b690 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50  iguous but all P
1b6a0 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20  1 values should 
1b6b0 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72  be small integer
1b6c0 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65  s..** It is an e
1b6d0 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62  rror for P1 to b
1b6e0 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a  e negative..**.*
1b6f0 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
1b700 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1b710 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61  of register P2 a
1b720 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c  s the root page,
1b730 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75   not.** the valu
1b740 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a  e of P2 itself..
1b750 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c  **.** There will
1b760 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20   be a read lock 
1b770 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1b780 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69  whenever there i
1b790 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72  s an.** open cur
1b7a0 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74  sor.  If the dat
1b7b0 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b  abase was unlock
1b7c0 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
1b7d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1b7e0 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b  then a read lock
1b7f0 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20   is acquired as 
1b800 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73  part of this ins
1b810 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61  truction.  A rea
1b820 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73  d.** lock allows
1b830 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73   other processes
1b840 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74   to read the dat
1b850 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62  abase but prohib
1b860 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72  its.** any other
1b870 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f   process from mo
1b880 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61  difying the data
1b890 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20  base.  The read 
1b8a0 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61  lock is.** relea
1b8b0 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72  sed when all cur
1b8c0 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e  sors are closed.
1b8d0 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75    If this instru
1b8e0 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a  ction attempts.*
1b8f0 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20  * to get a read 
1b900 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20  lock but fails, 
1b910 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69  the script termi
1b920 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a  nates with an.**
1b930 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
1b940 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54  or code..**.** T
1b950 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1b960 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1b970 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1b980 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1b990 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1b9a0 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1b9b0 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1b9c0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1b9d0 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1b9e0 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1b9f0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1ba00 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1ba10 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1ba20 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1ba30 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1ba40 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1ba50 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1ba60 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1ba70 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1ba80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1ba90 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a  n the table..**.
1baa0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65  ** See also: Ope
1bab0 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64  nWrite, ReopenId
1bac0 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
1bad0 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20  ReopenIdx P1 P2 
1bae0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1baf0 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1bb00 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  b=P3.**.** The R
1bb10 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1bb20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
1bb30 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65  ke ReadOpen exce
1bb40 70 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74  pt that it first
1bb50 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65  .** checks to se
1bb60 65 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  e if the cursor 
1bb70 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79  on P1 is already
1bb80 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f   open with a roo
1bb90 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  t page.** number
1bba0 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74   of P2 and if it
1bbb0 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20   is this opcode 
1bbc0 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
1bbd0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1bbe0 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73  ,.** if the curs
1bbf0 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  or is already op
1bc00 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65  en, do not reope
1bc10 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n it..**.** The 
1bc20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
1bc30 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65   may only be use
1bc40 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64  d with P5==0 and
1bc50 20 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a   with P4 being.*
1bc60 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f  * a P4_KEYINFO o
1bc70 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d  bject.  Furtherm
1bc80 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75  ore, the P3 valu
1bc90 65 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  e must be the sa
1bca0 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f  me as.** every o
1bcb0 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f  ther ReopenIdx o
1bcc0 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74  r OpenRead for t
1bcd0 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e  he same cursor n
1bce0 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  umber..**.** See
1bcf0 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70   the OpenRead op
1bd00 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69  code documentati
1bd10 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  on for additiona
1bd20 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
1bd30 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1bd40 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
1bd50 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1bd60 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1bd70 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1bd80 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1bd90 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
1bda0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1bdb0 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
1bdc0 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
1bdd0 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
1bde0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1bdf0 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
1be00 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
1be10 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1be20 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1be30 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1be40 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1be50 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1be60 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1be70 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1be80 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1be90 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1bea0 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1beb0 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1bec0 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1bed0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1bee0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1bef0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1bf00 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1bf10 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1bf20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1bf30 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1bf40 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1bf50 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1bf60 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a  le, or to the.**
1bf70 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f   largest index o
1bf80 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  f any column of 
1bf90 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
1bfa0 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e  s actually used.
1bfb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1bfc0 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
1bfd0 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
1bfe0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1bff0 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
1c000 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
1c010 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
1c020 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
1c030 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
1c040 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
1c050 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
1c060 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
1c070 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
1c080 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
1c090 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
1c0a0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e  /.case OP_Reopen
1c0b0 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  Idx: {.  int nFi
1c0c0 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  eld;.  KeyInfo *
1c0d0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
1c0e0 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  p2;.  int iDb;. 
1c0f0 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
1c100 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
1c110 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
1c120 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65  Db *pDb;..  asse
1c130 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
1c140 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  | pOp->p5==OPFLA
1c150 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73  G_SEEKEQ );.  as
1c160 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1c170 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1c180 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
1c190 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
1c1a0 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d  f( pCur && pCur-
1c1b0 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29  >pgnoRoot==(u32)
1c1c0 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61  pOp->p2 ){.    a
1c1d0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62  ssert( pCur->iDb
1c1e0 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20  ==pOp->p3 );    
1c1f0 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20    /* Guaranteed 
1c200 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  by the code gene
1c210 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74  rator */.    got
1c220 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  o open_cursor_se
1c230 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f  t_hints;.  }.  /
1c240 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1c250 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
1c260 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e   open or is open
1c270 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a   on a different.
1c280 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e    ** index, then
1c290 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   fall through in
1c2a0 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74  to OP_OpenRead t
1c2b0 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e  o force a reopen
1c2c0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e   */.case OP_Open
1c2d0 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
1c2e0 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65  enWrite:..  asse
1c2f0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1c300 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c  =OP_OpenWrite ||
1c310 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1c320 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53  Op->p5==OPFLAG_S
1c330 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72  EEKEQ );.  asser
1c340 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1c350 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c360 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1c370 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70  nRead || pOp->op
1c380 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49  code==OP_ReopenI
1c390 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20  dx.          || 
1c3a0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1c3b0 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  ;..  if( p->expi
1c3c0 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  red ){.    rc = 
1c3d0 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
1c3e0 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20  LBACK;.    goto 
1c3f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1c400 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  or;.  }..  nFiel
1c410 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
1c420 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
1c430 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
1c440 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1c450 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1c460 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1c470 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1c480 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1c490 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  b) );.  pDb = &d
1c4a0 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70  b->aDb[iDb];.  p
1c4b0 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  X = pDb->pBt;.  
1c4c0 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b  assert( pX!=0 );
1c4d0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1c4e0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1c4f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1c500 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
1c510 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  ==BTREE_FORDELET
1c520 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20  E );.    wrFlag 
1c530 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20  = BTREE_WRCSR | 
1c540 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1c550 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20  G_FORDELETE);.  
1c560 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1c570 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1c580 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
1c590 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63      if( pDb->pSc
1c5a0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1c5b0 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t < p->minWriteF
1c5c0 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20  ileFormat ){.   
1c5d0 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69     p->minWriteFi
1c5e0 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e  leFormat = pDb->
1c5f0 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1c600 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rmat;.    }.  }e
1c610 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  lse{.    wrFlag 
1c620 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 0;.  }.  if( p
1c630 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1c640 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61  P2ISREG ){.    a
1c650 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
1c660 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28     assert( p2<=(
1c670 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
1c680 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70  Cursor) );.    p
1c690 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
1c6a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
1c6b0 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b  IsValid(pIn2) );
1c6c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49  .    assert( (pI
1c6d0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
1c6e0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73  Int)!=0 );.    s
1c6f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1c700 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
1c710 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
1c720 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
1c730 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
1c740 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
1c750 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 42  prior OP_CreateB
1c760 74 72 65 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  tree opcode and.
1c770 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
1c780 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
1c790 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
1c7a0 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
1c7b0 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
1c7c0 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
1c7d0 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
1c7e0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1c7f0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
1c800 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
1c810 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
1c820 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
1c830 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d      assert( p2>=
1c840 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  2 );.  }.  if( p
1c850 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1c860 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1c870 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1c880 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1c890 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1c8a0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1c8b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1c8c0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1c8d0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1c8e0 65 79 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c  eyInfo->nAllFiel
1c8f0 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  d;.  }else if( p
1c900 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1c910 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
1c920 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1c930 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1c940 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1c950 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20  sert( nField>=0 
1c960 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
1c970 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20  Field==0 );  /* 
1c980 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47  Table with INTEG
1c990 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
1c9a0 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20  nd nothing else 
1c9b0 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
1c9c0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1c9d0 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
1c9e0 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  Db, CURTYPE_BTRE
1c9f0 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  E);.  if( pCur==
1ca00 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1ca10 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
1ca20 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
1ca30 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70  Ordered = 1;.  p
1ca40 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20  Cur->pgnoRoot = 
1ca50 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p2;.#ifdef SQLIT
1ca60 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e  E_DEBUG.  pCur->
1ca70 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b  wrFlag = wrFlag;
1ca80 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73  .#endif.  rc = s
1ca90 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1caa0 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67  r(pX, p2, wrFlag
1cab0 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72  , pKeyInfo, pCur
1cac0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1cad0 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
1cae0 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a  = pKeyInfo;.  /*
1caf0 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72   Set the VdbeCur
1cb00 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69  sor.isTable vari
1cb10 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76  able. Previous v
1cb20 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
1cb30 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
1cb40 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
1cb50 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
1cb60 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
1cb70 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
1cb80 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
1cb90 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
1cba0 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
1cbb0 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
1cbc0 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
1cbd0 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
1cbe0 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
1cbf0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
1cc00 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
1cc10 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f  NFO;..open_curso
1cc20 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61  r_set_hints:.  a
1cc30 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55  ssert( OPFLAG_BU
1cc40 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c  LKCSR==BTREE_BUL
1cc50 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72  KLOAD );.  asser
1cc60 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  t( OPFLAG_SEEKEQ
1cc70 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20  ==BTREE_SEEK_EQ 
1cc80 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
1cc90 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1cca0 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65  BULKCSR );.#ifde
1ccb0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1ccc0 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74  CURSOR_HINTS.  t
1ccd0 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
1cce0 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51   & OPFLAG_SEEKEQ
1ccf0 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c   );.#endif.  sql
1cd00 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
1cd10 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75  intFlags(pCur->u
1cd20 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20  c.pCursor,.     
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
1cd50 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c  p5 & (OPFLAG_BUL
1cd60 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b  KCSR|OPFLAG_SEEK
1cd70 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20  EQ)));.  if( rc 
1cd80 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1cd90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1cda0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1cdb0 3a 20 4f 70 65 6e 44 75 70 20 50 31 20 50 32 20  : OpenDup P1 P2 
1cdc0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  * * *.**.** Open
1cdd0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1cde0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1cdf0 74 68 65 20 73 61 6d 65 20 65 70 68 65 6d 65 72  the same ephemer
1ce00 61 6c 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63  al table as.** c
1ce10 75 72 73 6f 72 20 50 32 2e 20 20 54 68 65 20 50  ursor P2.  The P
1ce20 32 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  2 cursor must ha
1ce30 76 65 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 62  ve been opened b
1ce40 79 20 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65  y a prior OP_Ope
1ce50 6e 45 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70  nEphemeral.** op
1ce60 63 6f 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65  code.  Only ephe
1ce70 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 6d 61  meral cursors ma
1ce80 79 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 2e  y be duplicated.
1ce90 0a 2a 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65  .**.** Duplicate
1cea0 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
1ceb0 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1cec0 73 65 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61  self-joins of ma
1ced0 74 65 72 69 61 6c 69 7a 65 64 20 76 69 65 77 73  terialized views
1cee0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1cef0 6e 44 75 70 3a 20 7b 0a 20 20 56 64 62 65 43 75  nDup: {.  VdbeCu
1cf00 72 73 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20 20  rsor *pOrig;    
1cf10 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
1cf20 63 75 72 73 6f 72 20 74 6f 20 62 65 20 64 75 70  cursor to be dup
1cf30 6c 69 63 61 74 65 64 20 2a 2f 0a 20 20 56 64 62  licated */.  Vdb
1cf40 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 20 20 20  eCursor *pCx;   
1cf50 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 63 75     /* The new cu
1cf60 72 73 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67  rsor */..  pOrig
1cf70 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1cf80 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
1cf90 70 4f 72 69 67 2d 3e 70 42 74 78 21 3d 30 20 29  pOrig->pBtx!=0 )
1cfa0 3b 20 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d  ;  /* Only ephem
1cfb0 65 72 61 6c 20 63 75 72 73 6f 72 73 20 63 61 6e  eral cursors can
1cfc0 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a   be duplicated *
1cfd0 2f 0a 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  /..  pCx = alloc
1cfe0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1cff0 2d 3e 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69  ->p1, pOrig->nFi
1d000 65 6c 64 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  eld, -1, CURTYPE
1d010 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1d020 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1d030 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1d040 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1d050 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1d060 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1d070 20 3d 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e   = pOrig->pKeyIn
1d080 66 6f 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  fo;.  pCx->isTab
1d090 6c 65 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61  le = pOrig->isTa
1d0a0 62 6c 65 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ble;.  rc = sqli
1d0b0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1d0c0 4f 72 69 67 2d 3e 70 42 74 78 2c 20 4d 41 53 54  Orig->pBtx, MAST
1d0d0 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57  ER_ROOT, BTREE_W
1d0e0 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  pCx->pKeyInfo, p
1d110 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1d120 0a 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65  .  /* The sqlite
1d130 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 72  3BtreeCursor() r
1d140 6f 75 74 69 6e 65 20 63 61 6e 20 6f 6e 6c 79 20  outine can only 
1d150 66 61 69 6c 20 66 6f 72 20 74 68 65 20 66 69 72  fail for the fir
1d160 73 74 20 63 75 72 73 6f 72 0a 20 20 2a 2a 20 6f  st cursor.  ** o
1d170 70 65 6e 65 64 20 66 6f 72 20 61 20 64 61 74 61  pened for a data
1d180 62 61 73 65 2e 20 20 53 69 6e 63 65 20 74 68 65  base.  Since the
1d190 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 6e  re is already an
1d1a0 20 6f 70 65 6e 20 63 75 72 73 6f 72 20 77 68 65   open cursor whe
1d1b0 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 70 63 6f  n this.  ** opco
1d1c0 64 65 20 69 73 20 72 75 6e 2c 20 74 68 65 20 73  de is run, the s
1d1d0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1d1e0 72 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  r() cannot fail 
1d1f0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  */.  assert( rc=
1d200 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
1d210 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1d220 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65  code: OpenEpheme
1d230 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50  ral P1 P2 * P4 P
1d240 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  5.** Synopsis: n
1d250 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1d260 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1d270 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69  r P1 to a transi
1d280 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ent table..** Th
1d290 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61  e cursor is alwa
1d2a0 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77  ys opened read/w
1d2b0 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a  rite even if .**
1d2c0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1d2d0 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e  se is read-only.
1d2e0 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a    The ephemeral.
1d2f0 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
1d300 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
1d310 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
1d320 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
1d330 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
1d340 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1d350 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  n the ephemeral 
1d360 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1d370 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61  rsor points to a
1d380 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20   BTree table if 
1d390 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42  P4==0 and to a B
1d3a0 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66  Tree index.** if
1d3b0 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49   P4 is not 0.  I
1d3c0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1d3d0 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  , it points to a
1d3e0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1d3f0 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e  re.** that defin
1d400 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
1d410 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64   keys in the ind
1d420 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  ex..**.** The P5
1d430 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62   parameter can b
1d440 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20  e a mask of the 
1d450 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65  BTREE_* flags de
1d460 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65  fined.** in btre
1d470 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67  e.h.  These flag
1d480 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74  s control aspect
1d490 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69  s of the operati
1d4a0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72  on of.** the btr
1d4b0 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f  ee.  The BTREE_O
1d4c0 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20  MIT_JOURNAL and 
1d4d0 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61  BTREE_SINGLE fla
1d4e0 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20  gs are.** added 
1d4f0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
1d500 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1d510 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32  nAutoindex P1 P2
1d520 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
1d530 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1d540 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1d550 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  e works the same
1d560 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   as OP_OpenEphem
1d570 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a  eral.  It has a.
1d580 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ** different nam
1d590 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  e to distinguish
1d5a0 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65   its use.  Table
1d5b0 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  s created using.
1d5c0 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ** by this opcod
1d5d0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  e will be used f
1d5e0 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  or automatically
1d5f0 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65   created transie
1d600 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e  nt.** indices in
1d610 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20   joins..*/.case 
1d620 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  OP_OpenAutoindex
1d630 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  : .case OP_OpenE
1d640 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
1d650 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
1d660 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1d670 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f  fo;..  static co
1d680 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73  nst int vfsFlags
1d690 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
1d6a0 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
1d6b0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1d6c0 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
1d6d0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
1d6e0 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
1d6f0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
1d700 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
1d710 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
1d720 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61  RANSIENT_DB;.  a
1d730 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1d740 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d750 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1d760 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1d770 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1d780 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52  pOp->p2, -1, CUR
1d790 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69  TYPE_BTREE);.  i
1d7a0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1d7b0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1d7c0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1d7d0 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  Cx->isEphemeral 
1d7e0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
1d7f0 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d  te3BtreeOpen(db-
1d800 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70  >pVfs, 0, db, &p
1d810 43 78 2d 3e 70 42 74 78 2c 20 0a 20 20 20 20 20  Cx->pBtx, .     
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
1d840 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
1d850 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
1d860 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
1d870 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1d880 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1d890 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1d8a0 73 28 70 43 78 2d 3e 70 42 74 78 2c 20 31 29 3b  s(pCx->pBtx, 1);
1d8b0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1d8c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1d8d0 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1d8e0 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1d8f0 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1d900 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1d910 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1d920 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1d930 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1d940 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1d950 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1d960 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1d970 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1d980 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1d990 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1d9a0 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1d9b0 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1d9c0 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1d9d0 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1d9e0 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 43 78 2d  */.    if( (pCx-
1d9f0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1da00 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1da10 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1da20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1da30 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1da40 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1da50 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1da60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1da70 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1da80 70 42 74 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52  pBtx, &pgno, BTR
1da90 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1daa0 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1dab0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1dac0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1dad0 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1dae0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1daf0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1db00 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1db10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1db20 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1db30 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1db40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1db50 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1db60 78 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57  x, pgno, BTREE_W
1db70 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20        pKeyInfo, 
1dba0 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
1dbb0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1dbc0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
1dbd0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1dbe0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1dbf0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1dc00 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  pBtx, MASTER_ROO
1dc10 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  T, BTREE_WRCSR,.
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
1dc40 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1dc50 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73  );.      pCx->is
1dc60 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d  Table = 1;.    }
1dc70 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1dc80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1dc90 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e  o_error;.  pCx->
1dca0 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70  isOrdered = (pOp
1dcb0 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52  ->p5!=BTREE_UNOR
1dcc0 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b  DERED);.  break;
1dcd0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1dce0 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20  orterOpen P1 P2 
1dcf0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  P3 P4 *.**.** Th
1dd00 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1dd10 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1dd20 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1dd30 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1dd40 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1dd50 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1dd60 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1dd70 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1dd80 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1dd90 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1dda0 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a  rt algorithm..**
1ddb0 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20  .** If argument 
1ddc0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P3 is non-zero, 
1ddd0 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65  then it indicate
1dde0 73 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65  s that the sorte
1ddf0 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20  r may.** assume 
1de00 74 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f  that a stable so
1de10 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74  rt considering t
1de20 68 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c  he first P3 fiel
1de30 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65  ds of each.** ke
1de40 79 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20  y is sufficient 
1de50 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72  to produce the r
1de60 65 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e  equired results.
1de70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1de80 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1de90 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1dea0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1deb0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1dec0 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1ded0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1dee0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1def0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55   pOp->p2, -1, CU
1df00 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20  RTYPE_SORTER);. 
1df10 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1df20 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1df30 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1df40 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1df50 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1df60 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1df70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1df80 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d  >pKeyInfo->enc==
1df90 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20  ENC(db) );.  rc 
1dfa0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
1dfb0 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d  terInit(db, pOp-
1dfc0 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28  >p3, pCx);.  if(
1dfd0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1dfe0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1dff0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1e000 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65  code: SequenceTe
1e010 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
1e020 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20  * Synopsis: if( 
1e030 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
1e040 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a   ) pc = P2.**.**
1e050 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
1e060 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73  cursor. If the s
1e070 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20  equence counter 
1e080 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
1e090 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  o, jump.** to P2
1e0a0 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
1e0b0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1e0c0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
1e0d0 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a  , increment the.
1e0e0 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  ** the sequence 
1e0f0 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
1e100 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20  P_SequenceTest: 
1e110 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1e120 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  pC;.  assert( pO
1e130 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1e140 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1e150 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e160 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e170 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
1e180 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d  C) );.  if( (pC-
1e190 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20  >seqCount++)==0 
1e1a0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
1e1b0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
1e1c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1e1d0 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1e1e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1e1f0 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d  nopsis: P3 colum
1e200 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a  ns in r[P2].**.*
1e210 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1e220 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
1e230 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
1e240 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
1e250 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1e260 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
1e270 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
1e280 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65  row is the conte
1e290 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
1e2a0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
1e2b0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1e2c0 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1e2d0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1e2e0 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1e2f0 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1e300 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
1e310 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1e320 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1e330 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1e340 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1e350 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1e360 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1e370 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1e380 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1e390 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1e3a0 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1e3b0 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1e3c0 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1e3d0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1e3e0 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1e3f0 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1e400 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1e410 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1e420 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1e430 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1e440 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1e450 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1e460 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1e470 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1e480 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1e490 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1e4a0 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1e4b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1e4c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e4d0 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  3>=0 );.  pCx = 
1e4e0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1e4f0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1e500 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p3, -1, CURTYPE_
1e510 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70  PSEUDO);.  if( p
1e520 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1e530 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1e540 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1e550 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
1e560 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1e570 61 62 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47  able = 1;.  /* G
1e580 69 76 65 20 74 68 69 73 20 70 73 65 75 64 6f 2d  ive this pseudo-
1e590 63 75 72 73 6f 72 20 61 20 66 61 6b 65 20 42 74  cursor a fake Bt
1e5a0 43 75 72 73 6f 72 20 70 6f 69 6e 74 65 72 20 73  Cursor pointer s
1e5b0 6f 20 74 68 61 74 20 70 43 78 0a 20 20 2a 2a 20  o that pCx.  ** 
1e5c0 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20 70 61  can be safely pa
1e5d0 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 56  ssed to sqlite3V
1e5e0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1e5f0 29 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20  ).  This avoids 
1e600 61 20 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20  a test.  ** for 
1e610 70 43 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  pCx->eCurType==C
1e620 55 52 54 59 50 45 5f 42 54 52 45 45 20 69 6e 73  URTYPE_BTREE ins
1e630 69 64 65 20 6f 66 20 73 71 6c 69 74 65 33 56 64  ide of sqlite3Vd
1e640 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
1e650 0a 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20 61  .  ** which is a
1e660 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74   performance opt
1e670 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70  imization */.  p
1e680 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d  Cx->uc.pCursor =
1e690 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 6b   sqlite3BtreeFak
1e6a0 65 56 61 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a  eValidCursor();.
1e6b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e6c0 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b  5==0 );.  break;
1e6d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
1e6e0 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
1e6f0 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
1e700 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
1e710 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
1e720 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
1e730 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
1e740 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1e750 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
1e760 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
1e770 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e780 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1e790 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e7a0 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
1e7b0 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
1e7c0 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
1e7d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e7e0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
1e7f0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1e800 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1e810 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64  ED_MASK./* Opcod
1e820 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50  e: ColumnsUsed P
1e830 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
1e840 20 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68   This opcode (wh
1e850 69 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20  ich only exists 
1e860 69 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f  if SQLite was co
1e870 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53  mpiled with.** S
1e880 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
1e890 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69  UMN_USED_MASK) i
1e8a0 64 65 6e 74 69 66 69 65 73 20 77 68 69 63 68 20  dentifies which 
1e8b0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a  columns of the.*
1e8c0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
1e8d0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61   for cursor P1 a
1e8e0 72 65 20 75 73 65 64 2e 20 20 50 34 20 69 73 20  re used.  P4 is 
1e8f0 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
1e900 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69  .** (P4_INT64) i
1e910 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 72 73  n which the firs
1e920 74 20 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e  t 63 bits are on
1e930 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
1e940 65 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f  e.** first 63 co
1e950 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
1e960 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74  le or index that
1e970 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73   are actually us
1e980 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72  ed.** by the cur
1e990 73 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f  sor.  The high-o
1e9a0 72 64 65 72 20 62 69 74 20 69 73 20 73 65 74 20  rder bit is set 
1e9b0 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66  if any column af
1e9c0 74 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20  ter.** the 64th 
1e9d0 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65  is used..*/.case
1e9e0 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a   OP_ColumnsUsed:
1e9f0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1ea00 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  *pC;.  pC = p->a
1ea10 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ea20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
1ea30 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1ea40 54 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61  TREE );.  pC->ma
1ea50 73 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29  skUsed = *(u64*)
1ea60 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
1ea70 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
1ea80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1ea90 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GE P1 P2 P3 P4 *
1eaa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1eab0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1eac0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1ead0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1eae0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1eaf0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1eb00 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1eb10 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1eb20 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
1eb30 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
1eb40 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1eb50 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1eb60 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1eb70 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1eb80 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1eb90 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1eba0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1ebb0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1ebc0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1ebd0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1ebe0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1ebf0 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1ec00 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1ec10 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1ec20 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1ec30 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1ec40 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
1ec50 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1ec60 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1ec70 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1ec80 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1ec90 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
1eca0 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
1ecb0 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
1ecc0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
1ecd0 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
1ece0 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
1ecf0 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
1ed00 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
1ed10 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
1ed20 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
1ed30 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1ed40 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
1ed50 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
1ed60 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
1ed70 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
1ed80 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
1ed90 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxLE opcode with
1eda0 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
1edb0 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c  nts..** The IdxL
1edc0 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1edd0 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
1ede0 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
1edf0 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
1ee00 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  LE opcode will b
1ee10 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
1ee20 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
1ee30 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ions..**.** This
1ee40 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1ee50 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1ee60 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1ee70 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1ee80 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1ee90 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
1eea0 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
1eeb0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1eec0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1eed0 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
1eee0 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
1eef0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1ef00 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
1ef10 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1ef20 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1ef30 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50  eekGT P1 P2 P3 P
1ef40 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1ef50 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1ef60 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1ef70 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1ef80 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1ef90 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1efa0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1efb0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1efc0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1efd0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1efe0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1eff0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1f000 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1f010 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1f020 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1f030 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1f040 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1f050 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1f060 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1f070 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1f080 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1f090 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1f0a0 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1f0b0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1f0c0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1f0d0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1f0e0 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1f0f0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1f100 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1f110 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1f120 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1f130 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1f140 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1f150 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1f160 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1f170 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1f180 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1f190 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1f1a0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1f1b0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1f1c0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1f1d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1f1e0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1f1f0 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
1f200 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1f210 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20  code: SeekLT P1 
1f220 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53  P2 P3 P4 * .** S
1f230 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1f240 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1f250 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1f260 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1f270 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1f280 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1f290 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1f2a0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1f2b0 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1f2c0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1f2d0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1f2e0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1f2f0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1f300 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1f310 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1f320 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1f330 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1f340 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1f350 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1f360 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1f370 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1f380 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1f390 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
1f3a0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1f3b0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1f3c0 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
1f3d0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1f3e0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1f3f0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1f400 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1f410 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1f420 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1f430 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
1f440 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1f450 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
1f460 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
1f470 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1f480 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1f490 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1f4a0 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
1f4b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1f4c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1f4d0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1f4e0 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1f4f0 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31  pcode: SeekLE P1
1f500 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1f510 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1f520 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1f530 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1f540 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1f550 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1f560 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1f570 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1f580 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1f590 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1f5a0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1f5b0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1f5c0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1f5d0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1f5e0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1f5f0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1f600 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1f610 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1f620 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1f630 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1f640 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1f650 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1f660 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1f670 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1f680 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1f690 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1f6a0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1f6b0 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
1f6c0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1f6d0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1f6e0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1f6f0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1f700 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1f710 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1f720 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
1f730 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
1f740 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
1f750 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
1f760 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
1f770 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1f780 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1f790 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
1f7a0 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  t Next..**.** If
1f7b0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
1f7c0 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
1f7d0 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
1f7e0 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
1f7f0 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
1f800 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
1f810 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
1f820 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
1f830 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
1f840 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1f850 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
1f860 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
1f870 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
1f880 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
1f890 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
1f8a0 6e 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  n IdxGE opcode w
1f8b0 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
1f8c0 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
1f8d0 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxGE opcode will
1f8e0 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
1f8f0 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
1f900 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
1f910 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxGE opcode wil
1f920 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
1f930 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
1f940 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53  rations..**.** S
1f950 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1f960 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1f970 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
1f980 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1f990 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LT:         /* j
1f9a0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1f9b0 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20   OP_SeekLE:     
1f9c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f9d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1f9e0 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  GE:         /* j
1f9f0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1fa00 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20   OP_SeekGT: {   
1fa10 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1fa20 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
1fa30 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
1fa40 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f  arison result */
1fa50 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20  .  int oc;      
1fa60 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
1fa70 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1fa80 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63  *pC;    /* The c
1fa90 75 72 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f  ursor to seek */
1faa0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1fab0 64 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79  d r;  /* The key
1fac0 20 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a   to seek for */.
1fad0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
1fae0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1faf0 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65  f columns or fie
1fb00 6c 64 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a  lds in the key *
1fb10 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  /.  i64 iKey;   
1fb20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f         /* The ro
1fb30 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1fb40 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65  ek to */.  int e
1fb50 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a  qOnly;        /*
1fb60 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64   Only interested
1fb70 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a   in == results *
1fb80 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
1fb90 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1fba0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1fbb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fbc0 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
1fbd0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1fbe0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1fbf0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1fc00 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
1fc10 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
1fc20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1fc30 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  LE == OP_SeekLT+
1fc40 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  1 );.  assert( O
1fc50 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53  P_SeekGE == OP_S
1fc60 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73  eekLT+2 );.  ass
1fc70 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d  ert( OP_SeekGT =
1fc80 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b  = OP_SeekLT+3 );
1fc90 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1fca0 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
1fcb0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
1fcc0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20  rsor!=0 );.  oc 
1fcd0 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1fce0 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70   eqOnly = 0;.  p
1fcf0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1fd00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1fd10 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1fd20 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1fd30 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43  #endif..  if( pC
1fd40 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
1fd50 20 2f 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45   /* The BTREE_SE
1fd60 45 4b 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e  EK_EQ flag is on
1fd70 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20  ly set on index 
1fd80 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61  cursors */.    a
1fd90 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1fda0 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74  reeCursorHasHint
1fdb0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
1fdc0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d   BTREE_SEEK_EQ)=
1fdd0 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =0.             
1fde0 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
1fdf0 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e  ;..    /* The in
1fe00 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20  put value in P3 
1fe10 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20  might be of any 
1fe20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72  type: integer, r
1fe30 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20  eal, string,.   
1fe40 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
1fe50 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
1fe60 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
1fe70 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
1fe80 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65  do.    ** the se
1fe90 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69  ek, so convert i
1fea0 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d  t. */.    pIn3 =
1feb0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1fec0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
1fed0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
1fee0 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
1fef0 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
1ff00 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
1ff10 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
1ff20 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
1ff30 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1ff40 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
1ff50 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
1ff60 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1ff70 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1ff80 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1ff90 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c  without.    ** l
1ffa0 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
1ffb0 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
1ffc0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
1ffd0 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
1ffe0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1fff0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
20000 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
20010 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
20020 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
20030 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
20040 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
20050 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
20060 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
20070 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a  umber,.        *
20080 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
20090 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
200a0 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
200b0 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  /.        VdbeBr
200c0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20  anchTaken(1,2); 
200d0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
200e0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
200f0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
20100 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
20110 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
20120 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
20130 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
20140 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
20150 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
20160 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
20170 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
20180 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
20190 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
201a0 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
201b0 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
201c0 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
201d0 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
201e0 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
201f0 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
20200 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
20210 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
20220 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
20230 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64  if( pIn3->u.r<(d
20240 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
20250 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
20260 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65  _SeekGE==(OP_See
20270 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kGT-1) );.      
20280 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
20290 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d  kLT==(OP_SeekLE-
202a0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
202b0 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45  sert( (OP_SeekLE
202c0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
202d0 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
202e0 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
202f0 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
20300 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
20310 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20  01) ) oc--;.    
20320 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
20330 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
20340 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c  on iKey is small
20350 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
20360 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
20370 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
20380 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20  bstitute <= for 
20390 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20  < and > for >=. 
203a0 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69   */.      else i
203b0 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f  f( pIn3->u.r>(do
203c0 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
203d0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
203e0 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLE==(OP_Seek
203f0 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LT+1) );.       
20400 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
20410 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31  GT==(OP_SeekGE+1
20420 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
20430 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20  ert( (OP_SeekLT 
20440 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
20450 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20  eekGE & 0x0001) 
20460 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
20470 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
20480 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
20490 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20  1) ) oc++;.     
204a0 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63   }.    } .    rc
204b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
204c0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
204d0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
204e0 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
204f0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  res);.    pC->mo
20500 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
20510 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
20520 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20  P_Delete */.    
20530 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
20540 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
20550 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
20560 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  or;.    }.  }els
20570 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20  e{.    /* For a 
20580 63 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20  cursor with the 
20590 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69  BTREE_SEEK_EQ hi
205a0 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f  nt, only the OP_
205b0 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a  SeekGE and.    *
205c0 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f  * OP_SeekLE opco
205d0 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c  des are allowed,
205e0 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20   and these must 
205f0 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  be immediately f
20600 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62  ollowed.    ** b
20610 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72  y an OP_IdxGT or
20620 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65   OP_IdxLT opcode
20630 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  , respectively, 
20640 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
20650 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  y..    */.    if
20660 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
20670 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
20680 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
20690 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20  E_SEEK_EQ) ){.  
206a0 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a      eqOnly = 1;.
206b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
206c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
206d0 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ekGE || pOp->opc
206e0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29  ode==OP_SeekLE )
206f0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20700 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
20710 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31  P_IdxLT || pOp[1
20720 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
20730 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  GT );.      asse
20740 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70  rt( pOp[1].p1==p
20750 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20  Op[0].p1 );.    
20760 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
20770 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29  .p2==pOp[0].p2 )
20780 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20790 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30  pOp[1].p3==pOp[0
207a0 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p3 );.      as
207b0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e  sert( pOp[1].p4.
207c0 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29  i==pOp[0].p4.i )
207d0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69  ;.    }..    nFi
207e0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
207f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
20800 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
20810 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
20820 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
20830 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
20840 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
20850 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
20860 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
20870 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
20880 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
20890 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
208a0 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
208b0 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
208c0 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
208d0 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
208e0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
208f0 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
20900 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
20910 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
20920 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
20930 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
20940 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
20950 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
20960 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
20970 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
20980 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
20990 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
209a0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
209b0 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
209c0 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
209d0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
209e0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
209f0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
20a00 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
20a10 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
20a20 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
20a30 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
20a40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
20a50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
20a60 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
20a70 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
20a80 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
20a90 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
20aa0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
20ab0 6e 64 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65  ndif.    r.eqSee
20ac0 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20  n = 0;.    rc = 
20ad0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
20ae0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
20af0 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  c.pCursor, &r, 0
20b00 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
20b10 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
20b20 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
20b30 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
20b40 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
20b50 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71  ( eqOnly && r.eq
20b60 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Seen==0 ){.     
20b70 20 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20   assert( res!=0 
20b80 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65  );.      goto se
20b90 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20  ek_not_found;.  
20ba0 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65    }.  }.  pC->de
20bb0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
20bc0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
20bd0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
20be0 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
20bf0 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
20c00 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
20c10 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e  #endif.  if( oc>
20c20 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61  =OP_SeekGE ){  a
20c30 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
20c40 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGE || oc==OP_S
20c50 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28  eekGT );.    if(
20c60 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
20c70 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
20c80 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  GT) ){.      res
20c90 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
20ca0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
20cb0 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
20cc0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
20cd0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20ce0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
20cf0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
20d00 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
20d10 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
20d20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
20d30 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20d40 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20d50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20d60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
20d70 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
20d80 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
20d90 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
20da0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
20db0 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
20dc0 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
20dd0 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
20de0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
20df0 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
20e00 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
20e10 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
20e20 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72  ious(pC->uc.pCur
20e30 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  sor, 0);.      i
20e40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
20e50 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
20e60 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
20e70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
20e80 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
20e90 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a         res = 1;.
20ea0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
20eb0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
20ec0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20ed0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
20ee0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
20ef0 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
20f00 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
20f10 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
20f20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
20f30 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65   to.      ** see
20f40 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
20f50 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  case..      */. 
20f60 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
20f70 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75  e3BtreeEof(pC->u
20f80 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
20f90 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66  }.  }.seek_not_f
20fa0 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20  ound:.  assert( 
20fb0 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56  pOp->p2>0 );.  V
20fc0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
20fd0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
20fe0 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  res ){.    goto 
20ff0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
21000 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29  lse if( eqOnly )
21010 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
21020 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
21030 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
21040 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
21050 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f   );.    pOp++; /
21060 2a 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64  * Skip the OP_Id
21070 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20  xLt or OP_IdxGT 
21080 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a  that follows */.
21090 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
210a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64  /* Opcode: Found
210b0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
210c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
210d0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
210e0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
210f0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
21100 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
21110 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
21120 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
21130 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
21140 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
21150 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
21160 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
21170 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a  .** record..**.*
21180 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
21190 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
211a0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
211b0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
211c0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61  3 and P4.** is a
211d0 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
211e0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
211f0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
21200 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69  o P2 and.** P1 i
21210 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
21220 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
21230 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
21240 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
21250 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
21260 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
21270 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61  t can be.** adva
21280 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77  nced in the forw
21290 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  ard direction.  
212a0 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63  The Next instruc
212b0 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a  tion will work,.
212c0 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50  ** but not the P
212d0 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  rev instruction.
212e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
212f0 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
21300 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73  flict, NotExists
21310 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f  . SeekGe.*/./* O
21320 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
21330 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
21340 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
21350 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
21360 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
21370 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
21380 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
21390 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
213a0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
213b0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
213c0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
213d0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
213e0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
213f0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
21400 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
21410 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
21420 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
21430 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
21440 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e  3 and P4.** is n
21450 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  ot the prefix of
21460 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
21470 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
21480 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20  made to P2.  If 
21490 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74  P1 .** does cont
214a0 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f  ain an entry who
214b0 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65  se prefix matche
214c0 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f  s the P3/P4 reco
214d0 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a  rd then control.
214e0 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ** falls through
214f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
21500 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20  truction and P1 
21510 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
21520 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68   at the.** match
21530 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
21540 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
21550 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
21560 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
21570 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
21580 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
21590 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
215a0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
215b0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
215c0 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
215d0 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
215e0 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
215f0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
21600 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
21610 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f  s, NoConflict.*/
21620 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f  ./* Opcode: NoCo
21630 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20  nflict P1 P2 P3 
21640 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
21650 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
21660 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
21670 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
21680 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
21690 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
216a0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
216b0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
216c0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
216d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
216e0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
216f0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
21700 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
21710 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
21720 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
21730 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
21740 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
21750 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20  ** contains any 
21760 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70  NULL value, jump
21770 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
21780 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d  P2.  If all term
21790 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  s of the.** reco
217a0 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20  rd are not-NULL 
217b0 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20  then a check is 
217c0 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  done to determin
217d0 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20  e if any row in 
217e0 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20  the.** P1 index 
217f0 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63  btree has a matc
21800 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e  hing key prefix.
21810 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
21820 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a  o matches, jump.
21830 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  ** immediately t
21840 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20  o P2.  If there 
21850 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c  is a match, fall
21860 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61   through and lea
21870 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72  ve the P1.** cur
21880 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
21890 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77  the matching row
218a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
218b0 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ode is similar t
218c0 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69  o OP_NotFound wi
218d0 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  th the exception
218e0 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72  s that the.** br
218f0 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  anch is always t
21900 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74  aken if any part
21910 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b   of the search k
21920 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  ey input is NULL
21930 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
21940 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
21950 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
21960 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
21970 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
21980 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
21990 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
219a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
219b0 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
219c0 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
219d0 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
219e0 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
219f0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
21a00 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
21a10 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ts.*/.case OP_No
21a20 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a  Conflict:     /*
21a30 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
21a40 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
21a50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
21a60 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
21a70 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
21a80 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
21a90 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
21aa0 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d  s;.  int takeJum
21ab0 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56  p;.  int ii;.  V
21ac0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21ad0 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
21ae0 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65  ckedRecord *pFre
21af0 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
21b00 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
21b10 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
21b20 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
21b30 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d  _TEST.  if( pOp-
21b40 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f  >opcode!=OP_NoCo
21b50 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33  nflict ) sqlite3
21b60 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
21b70 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74  #endif..  assert
21b80 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
21b90 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
21ba0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
21bb0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
21bc0 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
21bd0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21be0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
21bf0 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
21c00 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
21c10 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
21c20 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70  code;.#endif.  p
21c30 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
21c40 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
21c50 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
21c60 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
21c70 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
21c80 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
21c90 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21ca0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  ble==0 );.  if( 
21cb0 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20  pOp->p4.i>0 ){. 
21cc0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
21cd0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
21ce0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
21cf0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
21d00 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a   r.aMem = pIn3;.
21d10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21d20 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  BUG.    for(ii=0
21d30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
21d40 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
21d50 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
21d60 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
21d70 20 20 20 20 20 61 73 73 65 72 74 28 20 28 72 2e       assert( (r.
21d80 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
21d90 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c   MEM_Zero)==0 ||
21da0 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30   r.aMem[ii].n==0
21db0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69   );.      if( ii
21dc0 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43   ) REGISTER_TRAC
21dd0 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72  E(pOp->p3+ii, &r
21de0 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20  .aMem[ii]);.    
21df0 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64  }.#endif.    pId
21e00 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70  xKey = &r;.    p
21e10 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Free = 0;.  }els
21e20 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
21e30 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
21e40 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20  _Blob );.    rc 
21e50 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
21e60 33 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3);.    assert( 
21e70 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
21e80 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
21e90 4d 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  M );.    if( rc 
21ea0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
21eb0 20 20 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b     pFree = pIdxK
21ec0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
21ed0 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
21ee0 6f 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ord(pC->pKeyInfo
21ef0 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  );.    if( pIdxK
21f00 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ey==0 ) goto no_
21f10 6d 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  mem;.    sqlite3
21f20 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
21f30 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
21f40 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
21f50 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
21f60 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
21f70 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65  t_rc = 0;.  take
21f80 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20  Jump = 0;.  if( 
21f90 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21fa0 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
21fb0 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
21fc0 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
21fd0 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
21fe0 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
21ff0 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
22000 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
22010 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
22020 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
22030 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
22040 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
22050 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69   ii<pIdxKey->nFi
22060 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
22070 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61    if( pIdxKey->a
22080 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
22090 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
220a0 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31      takeJump = 1
220b0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
220c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
220d0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
220e0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
220f0 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
22100 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
22110 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
22120 20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65 33   pFree ) sqlite3
22130 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72  DbFreeNN(db, pFr
22140 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ee);.  if( rc!=S
22150 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
22160 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22170 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
22180 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
22190 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  res;.  alreadyEx
221a0 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
221b0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
221c0 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73   1-alreadyExists
221d0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
221e0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
221f0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
22200 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
22210 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
22220 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
22230 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
22240 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30  alreadyExists!=0
22250 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72  ,2);.    if( alr
22260 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
22270 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
22280 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
22290 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a  ranchTaken(takeJ
222a0 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73  ump||alreadyExis
222b0 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts==0,2);.    if
222c0 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61  ( takeJump || !a
222d0 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67  lreadyExists ) g
222e0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
222f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22300 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52  /* Opcode: SeekR
22310 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
22320 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
22330 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
22340 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
22350 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
22360 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
22370 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
22380 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
22390 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 33    If register P3
223a0 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
223b0 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  n an integer or 
223c0 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a  if P1 does not.*
223d0 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  * contain a reco
223e0 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
223f0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
22400 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a  iately to P2.  .
22410 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  ** Or, if P2 is 
22420 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  0, raise an SQLI
22430 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72  TE_CORRUPT error
22440 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e  . If P1 does con
22450 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64  tain.** a record
22460 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
22470 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
22480 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
22490 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
224a0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
224b0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
224c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
224d0 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78  .** The OP_NotEx
224e0 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66  ists opcode perf
224f0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
22500 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74  eration, but wit
22510 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a  h OP_NotExists.*
22520 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  * the P3 registe
22530 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e  r must be guaran
22540 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  teed to contain 
22550 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
22560 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20  .  With this.** 
22570 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72  opcode, register
22580 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f   P3 might not co
22590 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
225a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
225b0 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
225c0 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
225d0 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
225e0 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
225f0 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
22600 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
22610 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
22620 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
22630 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
22640 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
22650 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
22660 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
22670 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
22680 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
22690 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
226a0 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
226b0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
226c0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
226d0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
226e0 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
226f0 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f  ct, SeekRowid.*/
22700 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
22710 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
22720 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22730 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
22740 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
22750 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
22760 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
22770 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
22780 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
22790 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
227a0 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
227b0 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
227c0 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
227d0 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
227e0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
227f0 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69  ly to P2.  Or, i
22800 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
22810 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f   an.** SQLITE_CO
22820 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20  RRUPT error. If 
22830 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
22840 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
22850 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
22860 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
22870 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
22880 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
22890 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
228a0 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
228b0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
228c0 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63  OP_SeekRowid opc
228d0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
228e0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
228f0 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20  but also allows 
22900 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74  the.** P3 regist
22910 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20  er to contain a 
22920 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75  non-integer valu
22930 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  e, in which case
22940 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20   the jump is.** 
22950 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54  always taken.  T
22960 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69  his opcode requi
22970 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77 61  res that P3 alwa
22980 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ys contain an in
22990 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  teger..**.** The
229a0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63   OP_NotFound opc
229b0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
229c0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
229d0 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a  on index btrees.
229e0 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61  ** (with arbitra
229f0 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b  ry multi-value k
22a00 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  eys)..**.** This
22a10 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
22a20 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
22a30 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
22a40 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64  nnot be advanced
22a50 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69  .** in either di
22a60 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
22a70 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
22a80 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f  xt and Prev opco
22a90 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20  des will.** not 
22aa0 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  work following t
22ab0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
22ac0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
22ad0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  d, NotFound, NoC
22ae0 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77  onflict, SeekRow
22af0 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  id.*/.case OP_Se
22b00 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ekRowid: {      
22b10 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
22b20 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
22b30 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
22b40 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
22b50 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
22b60 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
22b70 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
22b80 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
22b90 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
22ba0 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
22bb0 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n3, SQLITE_AFF_N
22bc0 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
22bd0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  );.    if( (pIn3
22be0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
22bf0 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  t)==0 ) goto jum
22c00 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f  p_to_p2;.  }.  /
22c10 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
22c20 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  nto OP_NotExists
22c30 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45   */.case OP_NotE
22c40 78 69 73 74 73 3a 20 20 20 20 20 20 20 20 20 20  xists:          
22c50 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
22c60 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
22c70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
22c80 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
22c90 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
22ca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22cb0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22cc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
22cd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22ce0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22cf0 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
22d00 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
22d10 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e  >seekOp = 0;.#en
22d20 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43  dif.  assert( pC
22d30 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
22d40 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
22d50 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
22d60 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
22d70 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
22d80 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
22d90 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  =0 );.  res = 0;
22da0 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e  .  iKey = pIn3->
22db0 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  u.i;.  rc = sqli
22dc0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
22dd0 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
22de0 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
22df0 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
22e00 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
22e10 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  =0 );.  pC->move
22e20 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
22e30 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
22e40 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e  Delete */.  pC->
22e50 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
22e60 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22e70 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22e80 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
22e90 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  to = 0;.  VdbeBr
22ea0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
22eb0 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ,2);.  pC->seekR
22ec0 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69  esult = res;.  i
22ed0 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
22ee0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22ef0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66  ITE_OK );.    if
22f00 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
22f10 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
22f20 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
22f30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
22f40 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
22f50 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
22f60 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
22f70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
22f80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22f90 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
22fa0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
22fb0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
22fc0 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a  ursor[P1].ctr++.
22fd0 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
22fe0 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
22ff0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
23000 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
23010 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
23020 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
23030 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
23040 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
23050 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
23060 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
23070 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
23080 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
23090 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
230a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
230b0 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
230c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
230d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
230e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
230f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23100 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  1]!=0 );.  asser
23110 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
23120 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d  >p1]->eCurType!=
23130 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
23140 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
23150 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
23160 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
23170 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23180 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
23190 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
231a0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
231b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
231c0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
231d0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
231e0 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
231f0 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
23200 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
23210 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
23220 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
23230 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
23240 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
23250 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
23260 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
23270 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
23280 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
23290 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
232a0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
232b0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
232c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
232d0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
232e0 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
232f0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
23300 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
23310 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
23320 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
23330 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
23340 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
23350 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
23360 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
23370 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
23380 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
23390 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
233a0 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
233b0 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
233c0 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
233d0 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
233e0 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
233f0 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
23400 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
23410 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
23420 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
23430 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
23440 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
23450 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
23460 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
23470 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
23480 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
23490 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20  */.  i64 v;     
234a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
234b0 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
234c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
234d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73  ;        /* Curs
234e0 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67  or of table to g
234f0 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64  et the new rowid
23500 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23520 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c  Result of an sql
23530 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20  ite3BtreeLast() 
23540 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
23550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
23560 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20  ounter to limit 
23570 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
23580 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20  arches */.  Mem 
23590 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
235a0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
235b0 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72  olding largest r
235c0 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43  owid for AUTOINC
235d0 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65  REMENT */.  Vdbe
235e0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
235f0 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65     /* Root frame
23600 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76   of VDBE */..  v
23610 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b   = 0;.  res = 0;
23620 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
23630 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
23640 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
23650 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23660 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
23670 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
23680 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23690 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
236a0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
236b0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
236c0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
236d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
236e0 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  0 );.  {.    /* 
236f0 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
23700 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
23710 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
23720 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
23730 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
23740 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
23750 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
23760 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
23770 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
23780 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
23790 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
237a0 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
237b0 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
237c0 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
237d0 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
237e0 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
237f0 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
23800 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
23810 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
23820 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
23830 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
23840 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
23850 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
23860 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
23870 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
23880 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
23890 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
238a0 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
238b0 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
238c0 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
238d0 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
238e0 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
238f0 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
23900 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
23910 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
23920 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
23930 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
23940 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
23950 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   times..    */. 
23960 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
23970 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65  sTable );..#ifde
23980 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
23990 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
239a0 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
239b0 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
239c0 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
239d0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
239e0 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
239f0 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
23a00 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
23a10 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
23a20 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
23a30 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
23a40 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
23a50 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
23a60 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
23a70 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
23a80 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
23a90 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
23aa0 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
23ab0 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
23ac0 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
23ad0 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
23ae0 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
23af0 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
23b00 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
23b10 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
23b20 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
23b30 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
23b40 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
23b50 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
23b60 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
23b70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23b80 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
23b90 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
23ba0 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50   v = 1;   /* IMP
23bb0 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20  : R-61914-48074 
23bc0 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
23bd0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23be0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
23bf0 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63  orIsValid(pC->uc
23c00 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  .pCursor) );.   
23c10 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
23c20 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
23c30 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
23c40 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d  .        if( v>=
23c50 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
23c60 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
23c70 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
23c80 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
23c90 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
23ca0 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
23cb0 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
23cc0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
23cd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23ce0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
23cf0 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  NT.    if( pOp->
23d00 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  p3 ){.      /* A
23d10 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
23d20 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
23d30 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61  cell. */.      a
23d40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
23d50 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
23d60 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
23d70 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
23d80 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
23d90 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
23da0 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
23db0 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  );.        /* As
23dc0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
23dd0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
23de0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
23df0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
23e00 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
23e10 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
23e20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
23e30 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65  p->p3];.      }e
23e40 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
23e50 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
23e60 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
23e70 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
23e80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23e90 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
23ea0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
23eb0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
23ec0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
23ed0 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
23ee0 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b  Change(p, pMem);
23ef0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
23f00 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
23f10 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
23f20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
23f30 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
23f40 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
23f50 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
23f60 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73  pMem);.      ass
23f70 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
23f80 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
23f90 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
23fa0 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
23fb0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65  */.      if( pMe
23fc0 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
23fd0 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
23fe0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
23ff0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
24000 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
24010 2d 31 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a  -17817-00630 */.
24020 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
24030 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24040 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
24050 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
24060 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
24070 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20  pMem->u.i + 1;. 
24080 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65       }.      pMe
24090 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
240a0 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  }.#endif.    if(
240b0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
240c0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  wid ){.      /* 
240d0 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
240e0 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31  F: R-07677-41881
240f0 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   If the largest 
24100 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74  ROWID is equal t
24110 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c  o the.      ** l
24120 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
24130 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32  integer (9223372
24140 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68  036854775807) th
24150 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
24160 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20        ** engine 
24170 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70  starts picking p
24180 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74  ositive candidat
24190 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64  e ROWIDs at rand
241a0 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a  om until.      *
241b0 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74  * it finds one t
241c0 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69  hat is not previ
241d0 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20  ously used. */. 
241e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
241f0 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
24200 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
24210 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
24220 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24240 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
24250 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
24260 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74  le. */.      cnt
24270 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a   = 0;.      do{.
24280 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
24290 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
242a0 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
242b0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
242c0 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a  ID>>1); v++;  /*
242d0 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69   Ensure that v i
242e0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
242f0 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68  ero */.      }wh
24300 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c  ile(  ((rc = sql
24310 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
24320 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
24330 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
24340 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24370 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
24380 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
24390 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
243a0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
243b0 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20   (++cnt<100));. 
243c0 20 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f       if( rc ) go
243d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
243e0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28  error;.      if(
243f0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
24400 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
24410 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
24420 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a  -38219-53002 */.
24430 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
24440 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24450 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
24460 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f  ssert( v>0 );  /
24470 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33  * EV: R-40812-03
24480 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  570 */.    }.   
24490 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
244a0 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
244b0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
244c0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
244d0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
244e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
244f0 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50  Opcode: Insert P
24500 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
24510 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
24520 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50  y=r[P3] data=r[P
24530 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  2].**.** Write a
24540 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
24550 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
24560 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
24570 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
24580 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
24590 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
245a0 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
245b0 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
245c0 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
245d0 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
245e0 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62  e value MEM_Blob
245f0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
24600 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
24610 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
24620 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
24630 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
24640 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74  .** be a MEM_Int
24650 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
24660 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
24670 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
24680 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
24690 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
246a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
246b0 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49  herwise not).  I
246c0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53  f the OPFLAG_LAS
246d0 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50  TROWID flag of P
246e0 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65  5 is set,.** the
246f0 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65  n rowid is store
24700 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74  d for subsequent
24710 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a   return by the.*
24720 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  * sqlite3_last_i
24730 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
24740 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73  nction (otherwis
24750 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69  e it is unmodifi
24760 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ed)..**.** If th
24770 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
24780 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
24790 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d  5 is set, the im
247a0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
247b0 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72  ht.** run faster
247c0 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20   by avoiding an 
247d0 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b  unnecessary seek
247e0 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20   on cursor P1.  
247f0 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20  However,.** the 
24800 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
24810 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f  SULT flag must o
24820 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68  nly be set if th
24830 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f  ere have been no
24840 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20   prior.** seeks 
24850 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72  on the cursor or
24860 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   if the most rec
24870 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20  ent seek used a 
24880 6b 65 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e  key equal to P3.
24890 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
248a0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
248b0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
248c0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
248d0 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
248e0 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
248f0 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
24900 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
24910 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
24920 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
24930 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
24940 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
24950 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
24960 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
24970 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
24980 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
24990 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
249a0 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c  Table structure,
249b0 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e   or may be NULL.
249c0 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f   If it is .** no
249d0 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
249e0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71   update-hook (sq
249f0 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
24a00 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
24a10 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  d .** following 
24a20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
24a30 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
24a40 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
24a50 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
24a60 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
24a70 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
24a80 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
24a90 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
24aa0 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
24ab0 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
24ac0 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
24ad0 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
24ae0 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
24af0 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
24b00 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
24b10 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
24b20 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
24b30 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
24b40 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
24b50 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
24b60 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
24b70 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
24b80 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
24b90 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
24ba0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
24bb0 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
24bc0 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
24bd0 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
24be0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
24bf0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
24c00 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32  key=P3 data=r[P2
24c10 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
24c20 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
24c30 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74  OP_Insert except
24c40 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73   that the key is
24c50 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
24c60 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68  value P3, not th
24c70 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
24c80 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e  nteger stored in
24c90 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
24ca0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
24cb0 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74   .case OP_Insert
24cc0 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  Int: {.  Mem *pD
24cd0 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45  ata;       /* ME
24ce0 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64  M cell holding d
24cf0 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ata for the reco
24d00 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
24d10 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  d */.  Mem *pKey
24d20 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  ;        /* MEM 
24d30 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79  cell holding key
24d40 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64    for the record
24d50 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
24d60 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
24d70 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
24d80 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
24d90 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
24da0 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
24db0 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
24dc0 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
24dd0 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
24de0 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
24df0 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
24e00 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
24e10 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
24e20 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c  e hook */.  Tabl
24e30 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
24e40 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
24e50 20 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74   - used by updat
24e60 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65  e and pre-update
24e70 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20   hooks */.  int 
24e80 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
24e90 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
24ea0 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
24eb0 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
24ec0 5f 49 4e 53 45 52 54 20 2a 2f 0a 20 20 42 74 72  _INSERT */.  Btr
24ed0 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f  eePayload x;   /
24ee0 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20  * Payload to be 
24ef0 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 6f  inserted */..  o
24f00 70 20 3d 20 30 3b 0a 20 20 70 44 61 74 61 20 3d  p = 0;.  pData =
24f10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
24f20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24f30 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24f40 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24f50 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
24f60 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
24f70 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24f80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24f90 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
24fa0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
24fb0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
24fc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24fd0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
24fe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f  );.  assert( (pO
24ff0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
25000 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69 73  SNOOP) || pC->is
25010 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
25020 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
25030 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d  P4_TABLE || pOp-
25040 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41 54  >p4type>=P4_STAT
25050 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  IC );.  REGISTER
25060 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
25070 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
25080 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
25090 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
250a0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
250b0 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
250c0 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
250d0 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
250e0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
250f0 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
25100 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
25110 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
25120 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75  x.nKey = pKey->u
25130 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
25140 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
25150 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
25160 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79  nt );.    x.nKey
25170 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a   = pOp->p3;.  }.
25180 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
25190 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
251a0 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28  HAS_UPDATE_HOOK(
251b0 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  db) ){.    asser
251c0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
251d0 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
251e0 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53  Db[pC->iDb].zDbS
251f0 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d  Name;.    pTab =
25200 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20   pOp->p4.pTab;. 
25210 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
25220 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  >p5 & OPFLAG_ISN
25230 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69 64  OOP) || HasRowid
25240 28 70 54 61 62 29 20 29 3b 0a 20 20 20 20 6f 70  (pTab) );.    op
25250 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
25260 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
25270 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
25280 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29  : SQLITE_INSERT)
25290 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
252a0 54 61 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f 74 20  Tab = 0; /* Not 
252b0 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
252c0 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
252d0 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 7a 44 62 20  ing. */.    zDb 
252e0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
252f0 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
25300 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
25310 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66  . */.  }..#ifdef
25320 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
25330 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
25340 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
25350 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69  e-update hook, i
25360 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64  f any */.  if( d
25370 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c  b->xPreUpdateCal
25380 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70 4f 70  lback .   && pOp
25390 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
253a0 4c 45 0a 20 20 20 26 26 20 21 28 70 4f 70 2d 3e  LE.   && !(pOp->
253b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
253c0 44 41 54 45 29 0a 20 20 29 7b 0a 20 20 20 20 73  DATE).  ){.    s
253d0 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64  qlite3VdbePreUpd
253e0 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53  ateHook(p, pC, S
253f0 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44  QLITE_INSERT, zD
25400 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c  b, pTab, x.nKey,
25410 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 20   pOp->p2);.  }. 
25420 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
25430 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62  PFLAG_ISNOOP ) b
25440 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
25450 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
25460 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
25470 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
25480 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
25490 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
254a0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
254b0 78 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74  x.nKey;.  assert
254c0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
254d0 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
254e0 74 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61  tr) );.  x.pData
254f0 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78   = pData->z;.  x
25500 2e 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  .nData = pData->
25510 6e 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20  n;.  seekResult 
25520 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
25530 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
25540 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
25550 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28  sult : 0);.  if(
25560 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
25570 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
25580 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d  x.nZero = pData-
25590 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
255a0 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d  e{.    x.nZero =
255b0 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79   0;.  }.  x.pKey
255c0 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
255d0 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
255e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
255f0 26 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e  &x,.      (pOp->
25600 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50  p5 & (OPFLAG_APP
25610 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50  END|OPFLAG_SAVEP
25620 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52  OSITION)), seekR
25630 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d  esult.  );.  pC-
25640 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
25650 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
25660 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25670 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
25680 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
25690 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
256a0 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  */.  if( rc ) go
256b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
256c0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 64 62 2d  error;.  if( db-
256d0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
256e0 20 26 26 20 6f 70 20 29 7b 0a 20 20 20 20 64 62   && op ){.    db
256f0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
25700 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
25710 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d  , op, zDb, pTab-
25720 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b  >zName, x.nKey);
25730 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25740 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
25750 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
25760 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  5.**.** Delete t
25770 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
25780 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
25790 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
257a0 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66  inting..**.** If
257b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45   the OPFLAG_SAVE
257c0 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20  POSITION bit of 
257d0 74 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  the P5 parameter
257e0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a   is set, then.**
257f0 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
25800 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
25810 67 20 61 74 20 20 65 69 74 68 65 72 20 74 68 65  g at  either the
25820 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
25830 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
25840 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
25850 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
25860 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
25870 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
25880 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
25890 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
258a0 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61  be a no-op. As a
258b0 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73   result, in this
258c0 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f   case.** it is o
258d0 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65  k to delete a re
258e0 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
258f0 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66   a Next loop. If
25900 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45   .** OPFLAG_SAVE
25910 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20  POSITION bit of 
25920 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  P5 is clear, the
25930 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  n the cursor wil
25940 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20  l be.** left in 
25950 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61  an undefined sta
25960 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  te..**.** If the
25970 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
25980 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
25990 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74  P5, that indicat
259a0 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  es that this.** 
259b0 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65  delete one of se
259c0 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64  veral associated
259d0 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61   with deleting a
259e0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61   table row and a
259f0 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69  ll its.** associ
25a00 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69  ated index entri
25a10 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65  es.  Exactly one
25a20 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65   of those delete
25a30 73 20 69 73 20 74 68 65 20 22 70 72 69 6d 61 72  s is the "primar
25a40 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54  y".** delete.  T
25a50 68 65 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c  he others are al
25a60 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44  l on OPFLAG_FORD
25a70 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72  ELETE cursors or
25a80 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72   else are.** mar
25a90 6b 65 64 20 77 69 74 68 20 74 68 65 20 41 55 58  ked with the AUX
25aa0 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a  DELETE flag..**.
25ab0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
25ac0 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
25ad0 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20   P2 (NB: P2 not 
25ae0 50 35 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e  P5) is set, then
25af0 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e   the row.** chan
25b00 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ge count is incr
25b10 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
25b20 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
25b30 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
25b40 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
25b50 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
25b60 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
25b70 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
25b80 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
25b90 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f   NULL then it po
25ba0 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20  ints to a Table 
25bb0 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20  object. In this 
25bc0 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20  case either .** 
25bd0 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72  the update or pr
25be0 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f  e-update hook, o
25bf0 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69  r both, may be i
25c00 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63  nvoked. The P1 c
25c10 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61  ursor must.** ha
25c20 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
25c30 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ed using OP_NotF
25c40 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
25c50 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
25c60 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63  de in .** this c
25c70 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c  ase. Specificall
25c80 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e  y, if one is con
25c90 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65  figured, the pre
25ca0 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20  -update hook is 
25cb0 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50  .** invoked if P
25cc0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54  4 is not NULL. T
25cd0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
25ce0 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65  s invoked if one
25cf0 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20   is configured, 
25d00 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55  .** P4 is not NU
25d10 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c  LL, and the OPFL
25d20 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
25d30 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a  is set in P2..**
25d40 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
25d50 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
25d60 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68  is set in P2, th
25d70 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  en P3 contains t
25d80 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66  he address.** of
25d90 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
25da0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
25db0 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  he value that th
25dc0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72  e rowid of the r
25dd0 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65  ow will.** be se
25de0 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61  t to by the upda
25df0 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  te..*/.case OP_D
25e00 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
25e10 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e  ursor *pC;.  con
25e20 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20  st char *zDb;.  
25e30 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69  Table *pTab;.  i
25e40 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f  nt opflags;..  o
25e50 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32  pflags = pOp->p2
25e60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25e70 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25e80 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25e90 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25ea0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25eb0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
25ec0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
25ed0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
25ee0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
25ef0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
25f00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25f10 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25f20 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20  o==0 );..#ifdef 
25f30 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
25f40 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
25f50 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52  P4_TABLE && HasR
25f60 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61  owid(pOp->p4.pTa
25f70 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30  b) && pOp->p5==0
25f80 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35   ){.    /* If p5
25f90 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65   is zero, the se
25fa0 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61  ek operation tha
25fb0 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  t positioned the
25fc0 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f   cursor prior to
25fd0 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74  .    ** OP_Delet
25fe0 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f  e will have also
25ff0 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76   set the pC->mov
26000 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20  etoTarget field 
26010 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  to the rowid of.
26020 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74      ** the row t
26030 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c  hat is being del
26040 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20  eted */.    i64 
26050 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74  iKey = sqlite3Bt
26060 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
26070 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
26080 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
26090 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
260a0 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  y );.  }.#endif.
260b0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
260c0 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d  ate-hook or pre-
260d0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
260e0 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
260f0 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65   zDb to.  ** the
26100 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20   name of the db 
26110 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74  to pass as to it
26120 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c  . Also set local
26130 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a   pTab to a copy.
26140 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e    ** of p4.pTab.
26150 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20   Finally, if p5 
26160 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74  is true, indicat
26170 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75  ing that this cu
26180 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61  rsor was.  ** la
26190 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50  st moved with OP
261a0 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76  _Next or OP_Prev
261b0 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f  , not Seek or No
261c0 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a  tFound, set .  *
261d0 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76  * VdbeCursor.mov
261e0 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65  etoTarget to the
261f0 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20   current rowid. 
26200 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
26210 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
26220 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
26230 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
26240 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
26250 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26260 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20  pOp->p4.pTab!=0 
26270 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
26280 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44  >aDb[pC->iDb].zD
26290 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  bSName;.    pTab
262a0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
262b0 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
262c0 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  5 & OPFLAG_SAVEP
262d0 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70  OSITION)!=0 && p
262e0 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
262f0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
26300 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74  rget = sqlite3Bt
26310 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
26320 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
26330 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
26340 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20    zDb = 0;   /* 
26350 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
26360 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
26370 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
26380 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  pTab = 0;  /* No
26390 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
263a0 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
263b0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
263c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
263d0 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
263e0 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
263f0 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  he pre-update-ho
26400 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
26410 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
26420 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
26430 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20  && pOp->p4.pTab 
26440 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
26450 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
26460 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20 20  G_ISUPDATE) .   
26470 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69        || HasRowi
26480 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20  d(pTab)==0 .    
26490 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f       || (aMem[pO
264a0 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p3].flags & M
264b0 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a  EM_Int) .    );.
264c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
264d0 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
264e0 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
264f0 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
26500 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
26510 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
26520 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
26530 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d    zDb, pTab, pC-
26540 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20  >movetoTarget,. 
26550 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20         pOp->p3. 
26560 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20     );.  }.  if( 
26570 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
26580 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b  _ISNOOP ) break;
26590 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f  .#endif. .  /* O
265a0 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63  nly flags that c
265b0 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41  an be set are SA
265c0 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41  VEPOISTION and A
265d0 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61  UXDELETE */ .  a
265e0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
265f0 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50  & ~(OPFLAG_SAVEP
26600 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41  OSITION|OPFLAG_A
26610 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b  UXDELETE))==0 );
26620 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
26630 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d  G_SAVEPOSITION==
26640 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
26650 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ON );.  assert( 
26660 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
26670 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  ==BTREE_AUXDELET
26680 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  E );..#ifdef SQL
26690 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
266a0 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a  p->pFrame==0 ){.
266b0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70      if( pC->isEp
266c0 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20  hemeral==0.     
266d0 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26     && (pOp->p5 &
266e0 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
266f0 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26  E)==0.        &&
26700 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f   (pC->wrFlag & O
26710 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
26720 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
26730 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b     nExtraDelete+
26740 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
26750 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
26760 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20  G_NCHANGE ){.   
26770 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d     nExtraDelete-
26780 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  -;.    }.  }.#en
26790 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  dif..  rc = sqli
267a0 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
267b0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
267c0 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63  Op->p5);.  pC->c
267d0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
267e0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
267f0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
26800 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
26810 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
26820 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  or;..  /* Invoke
26830 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
26840 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
26850 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
26860 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
26870 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
26880 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  e++;.    if( db-
26890 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
268a0 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
268b0 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  b) ){.      db->
268c0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
268d0 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
268e0 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
268f0 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
26900 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d  .          pC->m
26910 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
26920 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
26930 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  iDb>=0 );.    }.
26940 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
26950 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
26960 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
26970 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
26980 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
26990 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
269a0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
269b0 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
269c0 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
269d0 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
269e0 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
269f0 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
26a00 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
26a10 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
26a20 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
26a30 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
26a40 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
26a50 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
26a60 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
26a70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
26a80 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
26a90 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
26aa0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
26ab0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26ac0 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
26ad0 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
26ae0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79  Synopsis: if key
26af0 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d  (P1)!=trim(r[P3]
26b00 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
26b10 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
26b20 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
26b30 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
26b40 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
26b50 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c  the.** record bl
26b60 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
26b70 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
26b80 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
26b90 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
26ba0 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
26bb0 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
26bc0 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   Only the first 
26bd0 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20  P4 fields.** of 
26be0 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f  r[P3] and the so
26bf0 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
26c00 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  compared..**.** 
26c10 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
26c20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
26c30 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
26c40 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
26c50 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
26c60 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
26c70 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
26c80 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
26c90 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
26ca0 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
26cb0 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
26cc0 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
26cd0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
26ce0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
26cf0 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
26d00 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
26d10 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
26d20 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
26d30 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
26d40 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
26d50 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
26d60 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
26d70 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
26d80 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a    int nKeyCol;..
26d90 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
26da0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
26db0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
26dc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26dd0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
26de0 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
26df0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
26e00 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d    nKeyCol = pOp-
26e10 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30  >p4.i;.  res = 0
26e20 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
26e30 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
26e40 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79  e(pC, pIn3, nKey
26e50 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  Col, &res);.  Vd
26e60 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
26e70 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
26e80 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
26e90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
26ea0 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
26eb0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
26ec0 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
26ed0 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
26ee0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
26ef0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
26f00 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
26f10 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
26f20 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
26f30 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
26f40 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
26f50 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
26f60 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
26f70 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
26f80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
26f90 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
26fa0 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
26fb0 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
26fc0 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
26fd0 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
26fe0 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
26ff0 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
27000 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
27010 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
27020 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
27030 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
27040 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
27050 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
27060 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
27070 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
27080 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
27090 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
270a0 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
270b0 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
270c0 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
270d0 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
270e0 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
270f0 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
27100 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
27110 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
27120 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
27130 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
27140 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27150 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27160 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
27170 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
27180 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
27190 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
271a0 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
271b0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
271c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
271d0 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
271e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
271f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27200 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  r );.  if( rc ) 
27210 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27220 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70  o_error;.  p->ap
27230 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61  Csr[pOp->p3]->ca
27240 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27250 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
27260 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27270 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50 33  RowData P1 P2 P3
27280 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
27290 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
272a0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
272b0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
272c0 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65  mplete row conte
272d0 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61  nt for the row a
272e0 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73  t .** which curs
272f0 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  or P1 is current
27300 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20  ly pointing..** 
27310 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
27320 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
27330 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
27340 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
27350 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
27360 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
27370 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
27380 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
27390 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  ile..**.** If cu
273a0 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e  rsor P1 is an in
273b0 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  dex, then the co
273c0 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79  ntent is the key
273d0 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20   of the row..** 
273e0 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73 20  If cursor P2 is 
273f0 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68  a table, then th
27400 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63  e content extrac
27410 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61 2e  ted is the data.
27420 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
27430 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
27440 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
27450 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
27460 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
27470 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
27480 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
27490 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20  .**.** If P3!=0 
274a0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
274b0 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d   is allowed to m
274c0 61 6b 65 20 61 6e 20 65 70 68 65 72 6d 65 72 61  ake an ephermera
274d0 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74  l pointer.** int
274e0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  o the database p
274f0 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73  age.  That means
27500 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e   that the conten
27510 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a  t of the output.
27520 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c  ** register will
27530 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
27540 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63  as soon as the c
27550 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e  ursor moves - in
27560 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73  cluding.** moves
27570 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72   caused by other
27580 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73   cursors that "s
27590 61 76 65 22 20 74 68 65 20 74 68 65 20 63 75 72  ave" the the cur
275a0 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20  rent cursors.** 
275b0 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65  position in orde
275c0 72 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20  r that they can 
275d0 77 72 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d  write to the sam
275e0 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d  e table.  If P3=
275f0 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70  =0.** then a cop
27600 79 20 6f 66 20 74 68 65 20 64 61 74 61 20 69 73  y of the data is
27610 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72   made into memor
27620 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61 73  y.  P3!=0 is fas
27630 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d  ter, but.** P3==
27640 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a  0 is safer..**.*
27650 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20  * If P3!=0 then 
27660 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
27670 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 69  he P2 register i
27680 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72  s unsuitable for
27690 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65   use.** in OP_Re
276a0 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f  sult and any OP_
276b0 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61  Result will inva
276c0 6c 69 64 61 74 65 20 74 68 65 20 50 32 20 72 65  lidate the P2 re
276d0 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a  gister content..
276e0 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69 73 74  ** The P2 regist
276f0 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e  er content is in
27700 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63  validated by opc
27710 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e  odes like OP_Fun
27720 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61  ction or.** by a
27730 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65  ny use of anothe
27740 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  r cursor pointin
27750 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61  g to the same ta
27760 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
27770 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
27780 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
27790 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
277a0 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74    u32 n;..  pOut
277b0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
277c0 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73  e(p, pOp);..  as
277d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
277e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
277f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27800 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27810 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27820 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27830 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
27840 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
27850 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
27860 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
27870 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
27880 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
27890 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
278a0 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  r!=0 );.  pCrsr 
278b0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
278c0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
278d0 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
278e0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
278f0 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
27900 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f  * OP_SeekRowid o
27910 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  r OP_Rewind/Op_N
27920 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
27930 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
27940 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d  ions.  ** that m
27950 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20  ight invalidate 
27960 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a  the cursor..  **
27970 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e   If this where n
27980 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20  ot the case, on 
27990 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
279a0 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20   assert()s.  ** 
279b0 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f  would fail.  Sho
279c0 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68  uld this ever ch
279d0 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66  ange (because of
279e0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
279f0 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61  code.  ** genera
27a00 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69  tor) then the fi
27a10 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e  x would be to in
27a20 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20  sert a call to. 
27a30 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43   ** sqlite3VdbeC
27a40 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20  ursorMoveto().. 
27a50 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
27a60 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27a70 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
27a80 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
27a90 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
27aa0 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e  ) );.#if 0  /* N
27ab0 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20  ot required due 
27ac0 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
27ad0 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74  to assert() stat
27ae0 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d  ements */.  rc =
27af0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
27b00 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
27b10 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
27b20 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
27b30 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
27b40 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74  dif..  n = sqlit
27b50 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69  e3BtreePayloadSi
27b60 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28  ze(pCrsr);.  if(
27b70 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
27b80 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
27b90 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
27ba0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
27bb0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d  .  testcase( n==
27bc0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
27bd0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
27be0 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ree(pCrsr, 0, n,
27bf0 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63   pOut);.  if( rc
27c00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
27c10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
27c20 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65  ( !pOp->p3 ) Dee
27c30 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
27c40 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
27c50 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
27c60 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
27c70 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
27c80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27c90 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
27ca0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
27cb0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
27cc0 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
27cd0 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
27ce0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
27cf0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
27d00 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
27d10 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
27d20 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
27d30 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
27d40 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
27d50 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
27d60 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
27d70 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
27d80 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
27d90 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
27da0 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
27db0 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
27dc0 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
27dd0 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
27de0 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
27df0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
27e00 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
27e10 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
27e20 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27e30 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
27e40 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
27e50 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
27e60 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
27e70 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
27e80 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
27e90 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
27ea0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27eb0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27ec0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27ed0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27ee0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
27ef0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
27f00 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
27f10 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
27f20 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
27f30 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
27f40 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
27f50 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
27f60 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
27f70 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27f80 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
27f90 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
27fa0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27fb0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27fc0 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
27fd0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
27fe0 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  YPE_VTAB ){.    
27ff0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
28000 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70  VCur!=0 );.    p
28010 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56  Vtab = pC->uc.pV
28020 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  Cur->pVtab;.    
28030 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
28040 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
28050 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
28060 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
28070 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
28080 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20  d(pC->uc.pVCur, 
28090 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
280a0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
280b0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
280c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
280d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
280e0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
280f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28100 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
28110 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28120 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28130 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
28140 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
28150 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
28160 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
28170 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
28180 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
28190 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
281a0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
281b0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
281c0 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
281d0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
281e0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
281f0 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  }.    v = sqlite
28200 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
28210 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
28220 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
28230 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
28240 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
28250 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
28260 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
28270 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
28280 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
28290 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
282a0 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
282b0 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
282c0 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
282d0 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
282e0 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
282f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
28300 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
28310 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
28320 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28330 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
28340 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
28350 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
28360 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28370 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
28380 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
28390 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
283a0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
283b0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
283c0 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20  RTYPE_BTREE ){. 
283d0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
283e0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
283f0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
28400 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
28410 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
28420 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28430 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20  Opcode: SeekEnd 
28440 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
28450 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72   Position cursor
28460 20 50 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f   P1 at the end o
28470 66 20 74 68 65 20 62 74 72 65 65 20 66 6f 72 20  f the btree for 
28480 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a  the purpose of.*
28490 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65  * appending a ne
284a0 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65  w entry onto the
284b0 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74   btree..**.** It
284c0 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74   is assumed that
284d0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
284e0 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70  sed only for app
284f0 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a  ending and so.**
28500 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
28510 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68  s valid, then th
28520 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c  e cursor must al
28530 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e  ready be pointin
28540 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20  g.** at the end 
28550 6f 66 20 74 68 65 20 62 74 72 65 65 20 61 6e 64  of the btree and
28560 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61   so no changes a
28570 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68  re made to.** th
28580 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20  e cursor..*/./* 
28590 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
285a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
285b0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
285c0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
285d0 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
285e0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
285f0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
28600 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
28610 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
28620 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
28630 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
28640 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
28650 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
28660 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
28670 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
28680 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
28690 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
286a0 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
286b0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
286c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
286d0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
286e0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
286f0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
28700 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
28710 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
28720 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
28730 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
28740 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
28750 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
28760 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
28770 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
28780 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
28790 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64  .case OP_SeekEnd
287a0 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  :.case OP_Last: 
287b0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
287c0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
287d0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
287e0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
287f0 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
28800 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28810 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28820 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28830 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28840 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28850 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
28860 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
28870 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
28880 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
28890 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
288a0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
288b0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
288c0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
288d0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
288e0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  de;.#endif.  if(
288f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
28900 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20  _SeekEnd ){.    
28910 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
28920 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65  =0 );.    pC->se
28930 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20  ekResult = -1;. 
28940 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74     if( sqlite3Bt
28950 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
28960 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20  NN(pCrsr) ){.   
28970 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
28980 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
28990 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
289a0 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
289b0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
289c0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
289d0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
289e0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
289f0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
28a00 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
28a10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
28a20 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
28a30 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
28a40 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
28a50 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
28a60 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
28a70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
28a80 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
28a90 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33  Smaller P1 P2 P3
28aa0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d   * *.**.** Estim
28ab0 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ate the number o
28ac0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
28ad0 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f  ble P1.  Jump to
28ae0 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65   P2 if that.** e
28af0 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20  stimate is less 
28b00 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65  than approximate
28b10 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a  ly 2**(0.1*P3)..
28b20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61  */.case OP_IfSma
28b30 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f  ller: {        /
28b40 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
28b50 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
28b60 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
28b70 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20   int res;.  i64 
28b80 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sz;..  assert( p
28b90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28ba0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28bb0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28bc0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28bd0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28be0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
28bf0 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
28c00 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72  rt( pCrsr );.  r
28c10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
28c20 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
28c30 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
28c40 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28c50 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
28c60 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d  s==0 ){.    sz =
28c70 20 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77   sqlite3BtreeRow
28c80 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b  CountEst(pCrsr);
28c90 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59 53 28  .    if( ALWAYS(
28ca0 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65  sz>=0) && sqlite
28cb0 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29  3LogEst((u64)sz)
28cc0 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d  <pOp->p3 ) res =
28cd0 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72   1;.  }.  VdbeBr
28ce0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
28cf0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
28d00 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
28d10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
28d20 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
28d30 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
28d40 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c  .**.** After all
28d50 20 72 65 63 6f 72 64 73 20 68 61 76 65 20 62 65   records have be
28d60 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  en inserted into
28d70 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65   the Sorter obje
28d80 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64  ct.** identified
28d90 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74   by P1, invoke t
28da0 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63  his opcode to ac
28db0 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f  tually do the so
28dc0 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74  rting..** Jump t
28dd0 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72  o P2 if there ar
28de0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20  e no records to 
28df0 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  be sorted..**.**
28e00 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
28e10 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f  an alias for OP_
28e20 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69  Sort and OP_Rewi
28e30 6e 64 20 74 68 61 74 20 69 73 20 75 73 65 64 0a  nd that is used.
28e40 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62  ** for Sorter ob
28e50 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  jects..*/./* Opc
28e60 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
28e70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
28e80 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
28e90 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
28ea0 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
28eb0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
28ec0 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
28ed0 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
28ee0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
28ef0 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
28f00 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
28f10 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
28f20 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
28f30 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
28f40 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
28f50 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
28f60 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
28f70 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
28f80 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
28f90 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
28fa0 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
28fb0 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
28fc0 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
28fd0 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
28fe0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
28ff0 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
29000 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
29010 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
29020 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
29030 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
29040 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
29050 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
29060 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
29070 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
29080 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a  terSort:    /* j
29090 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ump */.case OP_S
290a0 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
290b0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
290c0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
290d0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
290e0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
290f0 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
29100 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
29110 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
29120 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20  ATUS_SORT]++;.  
29130 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
29140 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
29150 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
29160 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
29170 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
29180 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
29190 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
291a0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
291b0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
291c0 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
291d0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
291e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
291f0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
29200 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
29210 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70  x is empty, jump
29220 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
29230 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  P2..** If the ta
29240 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
29250 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
29260 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66  through to the f
29270 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73  ollowing .** ins
29280 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
29290 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
292a0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
292b0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
292c0 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
292d0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
292e0 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
292f0 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
29300 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
29310 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
29320 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
29330 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a  t, not Prev..*/.
29340 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
29350 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
29360 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
29370 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
29380 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
29390 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
293a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
293b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
293c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
293d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
293e0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
293f0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
29400 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
29410 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53  code==OP_SorterS
29420 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  ort) );.  res = 
29430 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  1;.#ifdef SQLITE
29440 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
29450 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b  kOp = OP_Rewind;
29460 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73  .#endif.  if( is
29470 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
29480 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
29490 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70  beSorterRewind(p
294a0 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
294b0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
294c0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
294d0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
294e0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
294f0 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  .pCursor;.    as
29500 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
29510 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
29520 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
29530 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
29540 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
29550 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
29560 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29570 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
29580 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29590 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
295a0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
295b0 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
295c0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
295d0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
295e0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
295f0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
29600 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
29610 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
29620 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29630 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
29640 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
29650 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
29660 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
29670 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
29680 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
29690 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
296a0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
296b0 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
296c0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
296d0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
296e0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
296f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
29700 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
29710 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
29720 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
29730 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
29740 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
29750 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
29760 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
29770 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
29780 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
29790 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
297a0 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
297b0 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
297c0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
297d0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
297e0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
297f0 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
29800 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
29810 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
29820 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
29830 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
29840 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
29850 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
29860 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
29870 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
29880 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
29890 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
298a0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
298b0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
298c0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
298d0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
298e0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
298f0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
29900 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
29910 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
29920 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
29930 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
29940 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
29950 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
29960 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
29970 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
29980 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
29990 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
299a0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
299b0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
299c0 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
299d0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
299e0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
299f0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
29a00 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
29a10 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
29a20 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
29a30 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
29a40 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
29a50 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
29a60 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
29a70 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
29a80 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
29a90 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
29aa0 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
29ab0 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
29ac0 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
29ad0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
29ae0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
29af0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
29b00 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
29b10 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
29b20 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
29b30 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
29b40 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
29b50 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
29b60 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
29b70 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
29b80 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
29b90 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
29ba0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
29bb0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
29bc0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
29bd0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
29be0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
29bf0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
29c00 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
29c10 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
29c20 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
29c30 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
29c40 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
29c50 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
29c60 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
29c70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
29c80 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
29c90 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
29ca0 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
29cb0 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
29cc0 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
29cd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
29ce0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
29cf0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
29d00 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
29d10 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
29d20 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
29d30 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
29d40 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
29d50 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
29d60 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
29d70 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
29d80 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
29d90 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
29da0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
29db0 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
29dc0 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
29dd0 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
29de0 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
29df0 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
29e00 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
29e10 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
29e20 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
29e30 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
29e40 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
29e50 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
29e60 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
29e70 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
29e80 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
29e90 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
29ea0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
29eb0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
29ec0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
29ed0 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
29ee0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
29ef0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
29f00 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
29f10 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
29f20 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
29f30 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
29f40 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
29f50 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
29f60 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
29f70 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
29f80 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
29f90 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f  es a no-op..*/./
29fa0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
29fb0 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50  Next P1 P2 * * P
29fc0 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
29fd0 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
29fe0 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65  ike OP_Next exce
29ff0 70 74 20 74 68 61 74 20 50 31 20 6d 75 73 74 20  pt that P1 must 
2a000 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f  be a.** sorter o
2a010 62 6a 65 63 74 20 66 6f 72 20 77 68 69 63 68 20  bject for which 
2a020 74 68 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  the OP_SorterSor
2a030 74 20 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65  t opcode has bee
2a040 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54  n.** invoked.  T
2a050 68 69 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e  his opcode advan
2a060 63 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 74  ces the cursor t
2a070 6f 20 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65  o the next sorte
2a080 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20  d.** record, or 
2a090 6a 75 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74  jumps to P2 if t
2a0a0 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
2a0b0 20 73 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e   sorted records.
2a0c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
2a0d0 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75  erNext: {  /* ju
2a0e0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2a0f0 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43 20 3d 20  or *pC;..  pC = 
2a100 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a110 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
2a120 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
2a130 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
2a140 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
2a150 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74  );.  goto next_t
2a160 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65  ail;.case OP_Pre
2a170 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  vIfOpen:    /* j
2a180 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
2a190 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  extIfOpen:    /*
2a1a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
2a1b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2a1c0 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
2a1d0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a  * Fall through *
2a1e0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
2a1f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2a200 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
2a210 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2a220 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
2a230 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2a240 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2a250 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2a260 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28  p->p5<ArraySize(
2a270 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a  p->aCounter) );.
2a280 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2a290 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2a2a0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2a2b0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2a2c0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2a2d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2a2e0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2a2f0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
2a300 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a310 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
2a320 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2a330 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
2a340 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a350 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
2a360 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a370 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a380 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
2a390 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2a3a0 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
2a3b0 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
2a3c0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2a3d0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
2a3e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2a3f0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
2a400 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a410 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a420 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
2a430 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
2a440 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
2a450 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
2a460 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
2a470 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
2a480 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2a490 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
2a4a0 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
2a4b0 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
2a4c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a4d0 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
2a4e0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
2a4f0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a500 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a510 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
2a520 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
2a530 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a540 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
2a550 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
2a560 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
2a570 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a580 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
2a590 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
2a5a0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a5b0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a5c0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
2a5d0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
2a5e0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a5f0 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
2a600 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
2a610 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75  vance(pC->uc.pCu
2a620 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  rsor, pOp->p3);.
2a630 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
2a640 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2a650 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
2a660 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63  beBranchTaken(rc
2a670 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a  ==SQLITE_OK,2);.
2a680 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2a690 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  _OK ){.    pC->n
2a6a0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
2a6b0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
2a6c0 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
2a6d0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
2a6e0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
2a6f0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
2a700 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2a710 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
2a720 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  interrupt;.  }. 
2a730 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2a740 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
2a750 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a760 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2a770 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
2a780 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63  = 1;.  goto chec
2a790 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2a7a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2a7b0 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
2a7c0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2a7d0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
2a7e0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
2a7f0 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
2a800 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
2a810 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
2a820 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
2a830 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
2a840 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
2a850 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
2a860 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
2a870 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2a880 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
2a890 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
2a8a0 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  it is the number
2a8b0 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
2a8c0 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65  e unpacked.** ke
2a8d0 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49  y of reg(P2).  I
2a8e0 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33 20  n that case, P3 
2a8f0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
2a900 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73 74  the first regist
2a910 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e  er.** for the un
2a920 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65  packed key.  The
2a930 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66   availability of
2a940 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2a950 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a  y can sometimes.
2a960 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a  ** be an optimiz
2a970 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
2a980 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2a990 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65 74  G_APPEND bit set
2a9a0 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e 74  , that is a hint
2a9b0 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
2a9c0 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69  ayer.** that thi
2a9d0 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  s insert is like
2a9e0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
2a9f0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
2aa00 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
2aa10 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
2aa20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
2aa30 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
2aa40 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
2aa50 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
2aa60 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
2aa70 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
2aa80 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
2aa90 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2aaa0 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
2aab0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
2aac0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
2aad0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
2aae0 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
2aaf0 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
2ab00 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
2ab10 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
2ab20 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
2ab30 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
2ab40 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
2ab50 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
2ab60 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
2ab70 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
2ab80 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
2ab90 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
2aba0 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
2abb0 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
2abc0 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 69   used a key equi
2abd0 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e  valent.** to P2.
2abe0 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73   .**.** This ins
2abf0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
2ac00 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
2ac10 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
2ac20 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
2ac30 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
2ac40 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  _Insert..*/./* O
2ac50 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73  pcode: SorterIns
2ac60 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ert P1 P2 * * *.
2ac70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2ac80 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
2ac90 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
2aca0 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
2acb0 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
2acc0 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
2acd0 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
2ace0 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
2acf0 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
2ad00 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20  the sorter P1.  
2ad10 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
2ad20 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61  ry is nil..*/.ca
2ad30 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
2ad40 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
2ad50 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
2ad60 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
2ad70 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2ad80 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2ad90 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20  reePayload x;.. 
2ada0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2adb0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2adc0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2add0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2ade0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2adf0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2ae00 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2ae10 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
2ae20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
2ae30 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
2ae40 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
2ae50 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
2ae60 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
2ae70 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
2ae80 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2ae90 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
2aea0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2aeb0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2aec0 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  BTREE || pOp->op
2aed0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2aee0 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72  nsert );.  asser
2aef0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2af00 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
2af10 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
2af20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2af30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2af40 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2af50 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2af60 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d  sert ){.    rc =
2af70 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2af80 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
2af90 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2afa0 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e  x.nKey = pIn2->n
2afb0 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70  ;.    x.pKey = p
2afc0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d  In2->z;.    x.aM
2afd0 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d  em = aMem + pOp-
2afe0 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20  >p3;.    x.nMem 
2aff0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
2b000 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2b010 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
2b020 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
2b030 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d  ,.         (pOp-
2b040 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50  >p5 & (OPFLAG_AP
2b050 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45  PEND|OPFLAG_SAVE
2b060 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20  POSITION)), .   
2b070 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
2b080 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2b090 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
2b0a0 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
2b0b0 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65       );.    asse
2b0c0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2b0d0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
2b0e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2b0f0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2b100 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f    }.  if( rc) go
2b110 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2b120 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
2b130 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2b140 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
2b150 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b160 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
2b170 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
2b180 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
2b190 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
2b1a0 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
2b1b0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2b1c0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
2b1d0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
2b1e0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
2b1f0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
2b200 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
2b210 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
2b220 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
2b230 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2b240 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2b250 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2b260 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2b270 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2b280 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2b290 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
2b2a0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
2b2b0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
2b2c0 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  or)+1 );.  asser
2b2d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2b2e0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2b2f0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2b300 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2b310 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2b320 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2b330 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2b340 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
2b350 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
2b360 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
2b370 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
2b380 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
2b390 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  0 );.  r.pKeyInf
2b3a0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2b3b0 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2b3c0 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72  u16)pOp->p3;.  r
2b3d0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2b3e0 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
2b3f0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63  m[pOp->p2];.  rc
2b400 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
2b410 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
2b420 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
2b430 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  res);.  if( rc )
2b440 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2b450 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2b460 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  res==0 ){.    rc
2b470 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2b480 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54 52  elete(pCrsr, BTR
2b490 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20  EE_AUXDELETE);. 
2b4a0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2b4b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b4c0 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  ror;.  }.  asser
2b4d0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2b4e0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
2b4f0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2b500 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
2b510 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
2b520 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
2b530 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72 72  * Opcode: Deferr
2b540 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50  edSeek P1 * P3 P
2b550 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2b560 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72   Move P3 to P1.r
2b570 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a 2a  owid if needed.*
2b580 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
2b590 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  en index cursor 
2b5a0 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73  and P3 is a curs
2b5b0 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  or on the corres
2b5c0 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65  ponding.** table
2b5d0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  .  This opcode d
2b5e0 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73  oes a deferred s
2b5f0 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61  eek of the P3 ta
2b600 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f  ble cursor.** to
2b610 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f   the row that co
2b620 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2b630 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
2b640 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P1..**.** This i
2b650 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2b660 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
2b670 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
2b680 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
2b690 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
2b6a0 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
2b6b0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
2b6c0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
2b6d0 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
2b6e0 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34  appens..**.** P4
2b6f0 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79   may be an array
2b700 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79   of integers (ty
2b710 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20  pe P4_INTARRAY) 
2b720 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e  containing.** on
2b730 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
2b740 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50   column in the P
2b750 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72  3 table.  If arr
2b760 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a  ay entry a(i).**
2b770 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2b780 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2b790 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75  n a(i)-1 from cu
2b7a0 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65  rsor P3 is .** e
2b7b0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72  quivalent to per
2b7c0 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65  forming the defe
2b7d0 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68  rred seek and th
2b7e0 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2b7f0 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e  n i .** from P1.
2b800 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
2b810 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
2b820 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  P3 and used to r
2b830 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73  edirect.** reads
2b840 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72   against P3 over
2b850 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73   to P1, thus pos
2b860 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74  sibly avoiding t
2b870 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65  he need to.** se
2b880 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73  ek and read curs
2b890 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  or P3..*/./* Opc
2b8a0 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
2b8b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2b8c0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
2b8d0 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  id.**.** Write i
2b8e0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
2b8f0 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
2b900 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
2b910 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
2b920 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
2b930 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
2b940 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
2b950 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
2b960 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
2b970 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
2b980 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2b990 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
2b9a0 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
2b9b0 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
2b9c0 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
2b9d0 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
2b9e0 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a 63  _DeferredSeek:.c
2b9f0 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
2ba00 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2ba10 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
2ba20 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
2ba30 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20        /* The P1 
2ba40 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
2ba50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54    VdbeCursor *pT
2ba60 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f 2a  abCur;        /*
2ba70 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63 75   The P2 table cu
2ba80 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72 65  rsor (OP_Deferre
2ba90 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20  dSeek only) */. 
2baa0 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20   i64 rowid;     
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2bac0 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63 75  Rowid that P1 cu
2bad0 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20  rrent points to 
2bae0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
2baf0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2bb00 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2bb10 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2bb20 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2bb30 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2bb40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2bb50 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2bb60 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2bb70 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2bb80 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2bb90 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2bba0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2bbb0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2bbc0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2bbd0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20  !pC->nullRow || 
2bbe0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2bbf0 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f  IdxRowid );..  /
2bc00 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20 61  * The IdxRowid a
2bc10 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20  nd Seek opcodes 
2bc20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63  are combined bec
2bc30 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d  ause of the comm
2bc40 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20  onality.  ** of 
2bc50 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2bc60 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73  rRestore() and s
2bc70 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2bc80 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  id(). */.  rc = 
2bc90 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2bca0 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20  rRestore(pC);.. 
2bcb0 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75   /* sqlite3VbeCu
2bcc0 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61  rsorRestore() ca
2bcd0 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74  n only fail if t
2bce0 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65  he record has be
2bcf0 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20  en deleted.  ** 
2bd00 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74  out from under t
2bd10 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74  he cursor.  That
2bd20 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70   will never happ
2bd30 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f  ens for an IdxRo
2bd40 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b  wid.  ** or Seek
2bd50 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28   opcode */.  if(
2bd60 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
2bd70 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
2bd80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2bd90 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c  ..  if( !pC->nul
2bda0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69  lRow ){.    rowi
2bdb0 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2bdc0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
2bdd0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
2bde0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2bdf0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2be00 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e  dxRowid(db, pC->
2be10 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77  uc.pCursor, &row
2be20 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
2be30 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2be40 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2be50 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
2be60 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
2be70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72  opcode==OP_Defer
2be80 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20 20  redSeek ){.     
2be90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2bea0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
2beb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20  ->nCursor );.   
2bec0 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e     pTabCur = p->
2bed0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  apCsr[pOp->p3];.
2bee0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2bef0 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  abCur!=0 );.    
2bf00 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2bf10 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
2bf20 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2bf30 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2bf40 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21  Cur->uc.pCursor!
2bf50 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
2bf60 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54  rt( pTabCur->isT
2bf70 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54  able );.      pT
2bf80 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  abCur->nullRow =
2bf90 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   0;.      pTabCu
2bfa0 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  r->movetoTarget 
2bfb0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2bfc0 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64  TabCur->deferred
2bfd0 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20  Moveto = 1;.    
2bfe0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2bff0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
2c000 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69  AY || pOp->p4.ai
2c010 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ==0 );.      pTa
2c020 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20  bCur->aAltMap = 
2c030 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20  pOp->p4.ai;.    
2c040 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43    pTabCur->pAltC
2c050 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20  ursor = pC;.    
2c060 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75  }else{.      pOu
2c070 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2c080 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20  se(p, pOp);.    
2c090 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
2c0a0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  wid;.    }.  }el
2c0b0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2c0c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2c0d0 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  IdxRowid );.    
2c0e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2c0f0 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d  tNull(&aMem[pOp-
2c100 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2]);.  }.  bre
2c110 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c120 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
2c130 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2c140 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2c150 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2c160 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2c170 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2c180 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2c190 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2c1a0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2c1b0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2c1c0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2c1d0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2c1e0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2c1f0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2c200 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2c210 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2c220 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2c230 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2c240 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2c250 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2c260 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2c270 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2c280 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2c290 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2c2a0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2c2b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2c2c0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2c2d0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2c2e0 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
2c2f0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2c300 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2c310 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2c320 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2c330 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2c340 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2c350 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2c360 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2c370 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2c380 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2c390 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2c3a0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2c3b0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2c3c0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2c3d0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2c3e0 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2c3f0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2c400 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2c410 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2c420 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
2c430 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
2c440 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
2c450 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2c460 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2c470 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2c480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2c490 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
2c4a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2c4b0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2c4c0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2c4d0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2c4e0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2c4f0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2c500 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2c510 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2c520 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2c530 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c540 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2c550 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2c560 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2c570 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2c580 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2c590 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2c5a0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2c5b0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2c5c0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2c5d0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
2c5e0 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2c5f0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
2c600 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2c610 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2c620 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2c630 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2c640 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2c650 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2c660 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2c670 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2c680 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2c690 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2c6a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2c6b0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2c6c0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2c6d0 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2c6e0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c6f0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2c700 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2c710 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2c720 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2c730 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2c740 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2c750 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2c760 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2c770 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2c780 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
2c790 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2c7a0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
2c7b0 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
2c7c0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2c7d0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2c7e0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2c7f0 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
2c800 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2c810 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
2c820 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c830 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
2c840 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2c850 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2c860 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
2c870 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2c880 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
2c890 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2c8a0 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2c8b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2c8c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2c8d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2c8e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2c8f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2c900 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c910 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
2c920 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2c930 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2c940 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2c950 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2c960 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
2c970 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2c980 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2c990 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2c9a0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
2c9b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c9c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2c9d0 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2c9e0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2c9f0 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2ca00 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2ca10 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
2ca20 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
2ca30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2ca40 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2ca50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2ca60 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
2ca70 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
2ca80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2ca90 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2caa0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2cab0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2cac0 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
2cad0 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2cae0 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
2caf0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
2cb00 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2cb10 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
2cb20 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
2cb30 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
2cb40 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
2cb50 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
2cb60 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
2cb70 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2cb80 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2cb90 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2cba0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2cbb0 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
2cbc0 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
2cbd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
2cbe0 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
2cbf0 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
2cc00 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
2cc10 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
2cc20 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
2cc30 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
2cc40 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2cc50 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2cc60 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2cc70 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2cc80 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
2cc90 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2cca0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2ccb0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2ccc0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2ccd0 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
2cce0 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2ccf0 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
2cd00 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2cd10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cd20 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  or;.  if( res>0 
2cd30 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2cd40 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2cd50 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
2cd60 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
2cd70 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
2cd80 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
2cd90 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
2cda0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
2cdb0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2cdc0 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
2cdd0 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
2cde0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
2cdf0 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
2ce00 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2ce10 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
2ce20 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
2ce30 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2ce40 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2ce50 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2ce60 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2ce70 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2ce80 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2ce90 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2cea0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2ceb0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
2cec0 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
2ced0 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
2cee0 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
2cef0 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
2cf00 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
2cf10 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
2cf20 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
2cf30 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
2cf40 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
2cf50 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
2cf60 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
2cf70 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
2cf80 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
2cf90 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
2cfa0 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
2cfb0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
2cfc0 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
2cfd0 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2cfe0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 49 66   register P2. If
2cff0 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e   no page movemen
2d000 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
2d010 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74  because the.** t
2d020 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
2d030 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 74  ed was already t
2d040 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2d050 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2d060 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20  n a .** zero is 
2d070 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2d080 65 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56  er P2.  If AUTOV
2d090 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
2d0a0 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a  d then a zero .*
2d0b0 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2d0c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2d0d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68  * This opcode th
2d0e0 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2d0f0 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
2d100 63 74 69 76 65 20 72 65 61 64 65 72 20 56 4d 73  ctive reader VMs
2d110 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69   when.** it is i
2d120 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20  nvoked. This is 
2d130 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68  done to avoid th
2d140 65 20 64 69 66 66 69 63 75 6c 74 79 20 61 73 73  e difficulty ass
2d150 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a  ociated with .**
2d160 20 75 70 64 61 74 69 6e 67 20 65 78 69 73 74 69   updating existi
2d170 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20  ng cursors when 
2d180 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d  a root page is m
2d190 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56  oved in an AUTOV
2d1a0 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61  ACUUM .** databa
2d1b0 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69  se. This error i
2d1c0 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66  s thrown even if
2d1d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2d1e0 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55   not an AUTOVACU
2d1f0 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64  UM .** db in ord
2d200 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72  er to avoid intr
2d210 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d  oducing an incom
2d220 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77 65  patibility betwe
2d230 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a  en autovacuum .*
2d240 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61  * and non-autova
2d250 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a  cuum modes..**.*
2d260 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
2d270 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
2d280 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
2d290 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
2d2a0 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
2d2b0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2d2c0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2d2d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31  ssert( pOp->p1>1
2d2e0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
2d2f0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2d300 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
2d310 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2d320 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65   if( db->nVdbeRe
2d330 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72  ad > db->nVDestr
2d340 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  oy+1 ){.    rc =
2d350 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
2d360 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
2d370 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
2d380 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2d390 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65  e_to_error;.  }e
2d3a0 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
2d3b0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
2d3c0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2d3d0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
2d3e0 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
2d3f0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2d400 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
2d410 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2d420 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2d430 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
2d440 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
2d450 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
2d460 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
2d470 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2d480 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
2d490 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69   = iMoved;.    i
2d4a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2d4b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d4c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d4d0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2d4e0 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d      if( iMoved!=
2d4f0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2d500 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2d510 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
2d520 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
2d530 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
2d540 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
2d550 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
2d560 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
2d570 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
2d580 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
2d590 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2d5a0 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
2d5b0 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
2d5c0 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
2d5d0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2d5e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d5f0 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
2d600 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
2d610 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2d620 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2d630 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2d640 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
2d650 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
2d660 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
2d670 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
2d680 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
2d690 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
2d6a0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2d6b0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
2d6c0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2d6d0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2d6e0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
2d6f0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2d700 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
2d710 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
2d720 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2d730 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2d740 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2d750 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2d760 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2d770 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2d780 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2d790 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2d7a0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
2d7b0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2d7c0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
2d7d0 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
2d7e0 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
2d7f0 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
2d800 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
2d810 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
2d820 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
2d830 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
2d840 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2d850 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2d860 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2d870 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
2d880 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
2d890 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
2d8a0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
2d8b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
2d8c0 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
2d8d0 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2d8e0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2d8f0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2d900 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
2d910 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
2d920 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
2d930 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
2d940 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
2d950 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2d960 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2d970 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2d980 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2d990 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2d9a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2d9b0 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2d9c0 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2d9d0 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2d9e0 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2d9f0 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2da00 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2da10 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2da20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2da30 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2da40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2da50 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2da60 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2da70 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2da80 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2da90 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2daa0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2dab0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2dac0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2dad0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2dae0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2daf0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2db00 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
2db10 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
2db20 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2db30 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
2db40 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
2db50 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
2db60 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
2db70 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
2db80 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
2db90 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
2dba0 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
2dbb0 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
2dbc0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
2dbd0 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
2dbe0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
2dbf0 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
2dc00 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2dc10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2dc20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2dc30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2dc40 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2dc50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2dc60 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
2dc70 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2dc80 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2dc90 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c  eSorterReset(db,
2dca0 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29   pC->uc.pSorter)
2dcb0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2dcc0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2dcd0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2dce0 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EE );.    assert
2dcf0 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
2dd00 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
2dd10 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
2dd20 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
2dd30 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2dd40 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2dd50 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2dd60 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2dd70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2dd80 72 65 61 74 65 42 74 72 65 65 20 50 31 20 50 32  reateBtree P1 P2
2dd90 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2dda0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2ddb0 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50 33 0a  iDb=P1 flags=P3.
2ddc0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2ddd0 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e 20 74   new b-tree in t
2dde0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2ddf0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
2de00 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d 50  r in the.** TEMP
2de10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2de20 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
2de30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2de40 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
2de50 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e 74 20  The P3 argument 
2de60 6d 75 73 74 20 62 65 20 31 20 28 42 54 52 45 45  must be 1 (BTREE
2de70 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61 20 72  _INTKEY) for a r
2de80 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69 74  owid table.** it
2de90 20 6d 75 73 74 20 62 65 20 32 20 28 42 54 52 45   must be 2 (BTRE
2dea0 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20 61  E_BLOBKEY) for a
2deb0 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48 4f 55   index or WITHOU
2dec0 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a  T ROWID table..*
2ded0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
2dee0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
2def0 77 20 62 2d 74 72 65 65 20 69 73 20 73 74 6f 72  w b-tree is stor
2df00 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2df10 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  2..*/.case OP_Cr
2df20 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20 20 20  eateBtree: {    
2df30 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2df40 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44  .  int pgno;.  D
2df50 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20  b *pDb;..  pOut 
2df60 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2df70 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
2df80 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2df90 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49  pOp->p3==BTREE_I
2dfa0 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33  NTKEY || pOp->p3
2dfb0 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  ==BTREE_BLOBKEY 
2dfc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2dfd0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2dfe0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2dff0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2e000 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2e010 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
2e020 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2e030 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
2e040 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
2e050 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
2e060 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 72  b->pBt!=0 );.  r
2e070 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2e080 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
2e090 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70  >pBt, &pgno, pOp
2e0a0 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p3);.  if( rc 
2e0b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2e0c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
2e0d0 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20  t->u.i = pgno;. 
2e0e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e0f0 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20 2a 20  code: SqlExec * 
2e100 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2e110 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  un the SQL state
2e120 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d 65 6e  ment or statemen
2e130 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  ts specified in 
2e140 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
2e150 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45 78 65  /.case OP_SqlExe
2e160 63 3a 20 7b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45  c: {.  db->nSqlE
2e170 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  xec++;.  rc = sq
2e180 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 70  lite3_exec(db, p
2e190 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c 20  Op->p4.z, 0, 0, 
2e1a0 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78  0);.  db->nSqlEx
2e1b0 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29  ec--;.  if( rc )
2e1c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2e1d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2e1e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2e1f0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
2e200 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2e210 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
2e220 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
2e230 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
2e240 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
2e250 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
2e260 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
2e270 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
2e280 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2e290 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
2e2a0 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
2e2b0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
2e2c0 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
2e2d0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2e2e0 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
2e2f0 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
2e300 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
2e310 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
2e320 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
2e330 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
2e340 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
2e350 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
2e360 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
2e370 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
2e380 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
2e390 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
2e3a0 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
2e3b0 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
2e3c0 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
2e3d0 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
2e3e0 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
2e3f0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
2e400 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
2e410 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2e420 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
2e430 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
2e440 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
2e450 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
2e460 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
2e470 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
2e480 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
2e490 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2e4a0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
2e4b0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
2e4c0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
2e4d0 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
2e4e0 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
2e4f0 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
2e500 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
2e510 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
2e520 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e  aster = MASTER_N
2e530 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  AME;.    initDat
2e540 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
2e550 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
2e560 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
2e570 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
2e580 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
2e590 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
2e5a0 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
2e5b0 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
2e5c0 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
2e5d0 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
2e5e0 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
2e5f0 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
2e600 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65  Db[iDb].zDbSName
2e610 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
2e620 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a  p4.z);.    if( z
2e630 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
2e640 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2e650 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  M_BKPT;.    }els
2e660 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
2e670 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
2e680 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
2e690 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
2e6a0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
2e6b0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
2e6c0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
2e6d0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
2e6e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2e6f0 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
2e700 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
2e710 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
2e720 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
2e730 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
2e740 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
2e750 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
2e760 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c  bFreeNN(db, zSql
2e770 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
2e780 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20  t.busy = 0;.    
2e790 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2e7a0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
2e7b0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
2e7c0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
2e7d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2e7e0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  _NOMEM ){.      
2e7f0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
2e800 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72   }.    goto abor
2e810 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2e820 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
2e830 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2e840 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
2e850 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
2e860 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
2e870 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
2e880 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
2e890 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
2e8a0 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
2e8b0 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
2e8c0 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
2e8d0 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
2e8e0 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
2e8f0 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
2e900 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
2e910 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
2e920 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
2e930 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
2e940 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
2e950 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
2e960 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e970 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2e980 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
2e990 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
2e9a0 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
2e9b0 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p1);.  if( rc ) 
2e9c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2e9d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
2e9e0 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
2e9f0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2ea00 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
2ea10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2ea20 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
2ea30 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2ea40 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2ea50 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2ea60 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2ea70 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
2ea80 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
2ea90 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2eaa0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2eab0 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
2eac0 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2ead0 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2eae0 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
2eaf0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
2eb00 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
2eb10 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2eb20 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2eb30 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2eb40 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2eb50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2eb60 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
2eb70 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2eb80 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
2eb90 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2eba0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ebb0 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
2ebc0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2ebd0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2ebe0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2ebf0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2ec00 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2ec10 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
2ec20 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2ec30 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2ec40 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
2ec50 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
2ec60 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2ec70 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2ec80 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f   opcode).** in o
2ec90 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
2eca0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2ecb0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2ecc0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2ecd0 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2ece0 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2ecf0 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a  se OP_DropIndex:
2ed00 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2ed10 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
2ed20 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2ed30 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2ed40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2ed50 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20   DropTrigger P1 
2ed60 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2ed70 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2ed80 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2ed90 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2eda0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2edb0 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65  the trigger name
2edc0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2edd0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2ede0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69  lled after a tri
2edf0 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70  gger.** is dropp
2ee00 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2ee10 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2ee20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
2ee30 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
2ee40 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2ee50 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2ee60 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2ee70 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2ee80 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2ee90 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
2eea0 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
2eeb0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2eec0 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
2eed0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2eee0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
2eef0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
2ef00 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
2ef10 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
2ef20 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 50  ityCk P1 P2 P3 P
2ef30 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e  4 P5.**.** Do an
2ef40 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65   analysis of the
2ef50 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
2ef60 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65  database.  Store
2ef70 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
2ef80 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  P1 the text of a
2ef90 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2efa0 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70  describing any p
2efb0 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e  roblems..** If n
2efc0 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  o problems are f
2efd0 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55  ound, store a NU
2efe0 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  LL in register P
2eff0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  1..**.** The reg
2f000 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
2f010 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e 20  s one less than 
2f020 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2f030 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
2f040 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
2f050 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
2f060 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
2f070 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
2f080 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
2f090 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
2f0a0 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
2f0b0 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
2f0c0 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
2f0d0 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
2f0e0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
2f0f0 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
2f100 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2f110 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
2f120 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
2f130 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a  se are integers.
2f140 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f  ** stored in P4_
2f150 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e  INTARRAY argumen
2f160 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  t..**.** If P5 i
2f170 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
2f180 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
2f190 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2f1a0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
2f1b0 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
2f1c0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
2f1d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2f1e0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
2f1f0 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
2f200 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
2f210 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
2f220 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
2f230 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
2f240 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
2f250 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
2f260 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
2f270 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
2f280 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
2f290 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
2f2a0 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
2f2b0 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
2f2c0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
2f2d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2f2e0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
2f2f0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
2f300 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2f310 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
2f320 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
2f330 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
2f340 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
2f350 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
2f360 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ing */..  assert
2f370 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
2f380 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  nRoot = pOp-
2f390 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70  >p2;.  aRoot = p
2f3a0 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73  Op->p4.ai;.  ass
2f3b0 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
2f3c0 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b    assert( aRoot[
2f3d0 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61  0]==nRoot );.  a
2f3e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2f3f0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2f400 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
2f410 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72  rsor) );.  pnErr
2f420 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2f430 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
2f440 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
2f450 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
2f460 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
2f470 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
2f480 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
2f490 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2f4a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f4b0 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
2f4c0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2f4d0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2f4e0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35  reeMask, pOp->p5
2f4f0 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ) );.  z = sqlit
2f500 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
2f510 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
2f520 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f  p->p5].pBt, &aRo
2f530 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20  ot[1], nRoot,.  
2f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2f560 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31  int)pnErr->u.i+1
2f570 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
2f580 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2f590 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
2f5a0 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
2f5b0 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
2f5c0 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
2f5d0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
2f5e0 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
2f5f0 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2f600 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  rr-1;.    sqlite
2f610 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2f620 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2f630 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2f640 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2f650 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2f660 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2f670 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2f680 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2f690 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2f6a0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2f6b0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2f6c0 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2f6d0 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2f6e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2f6f0 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28  ynopsis: rowset(
2f700 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2f710 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2f720 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2f730 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2f740 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  o a RowSet objec
2f750 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  t.** held in reg
2f760 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2f770 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2f780 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2f790 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2f7a0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2f7b0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2f7c0 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2f7d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2f7e0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2f7f0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2f800 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2f810 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2f820 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2f830 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2f840 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2f850 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2f860 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2f870 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2f880 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2f890 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2f8a0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2f8b0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2f8c0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2f8d0 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2f8e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2f8f0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2f900 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2f910 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65  sis: r[P3]=rowse
2f920 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2f930 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2f940 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
2f950 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 6e  RowSet object in
2f960 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20 74   P1.** and put t
2f970 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
2f980 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 4f  egister P3..** O
2f990 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f 62 6a  r, if RowSet obj
2f9a0 65 63 74 20 50 31 20 69 73 20 69 6e 69 74 69 61  ect P1 is initia
2f9b0 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
2f9c0 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
2f9d0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
2f9e0 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
2f9f0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
2fa00 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
2fa10 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a  ump, in1, out3 *
2fa20 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20  /.  i64 val;..  
2fa30 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2fa40 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
2fa50 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2fa60 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
2fa70 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
2fa80 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ext(pIn1->u.pRow
2fa90 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
2faa0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
2fab0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
2fac0 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
2fad0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2fae0 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62  l(pIn1);.    Vdb
2faf0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
2fb00 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
2fb10 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
2fb20 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2fb30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
2fb40 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
2fb50 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
2fb60 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61  x */.    VdbeBra
2fb70 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20  nchTaken(0,2);. 
2fb80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2fb90 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2fba0 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
2fbb0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2fbc0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2fbd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2fbe0 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
2fbf0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
2fc00 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
2fc10 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
2fc20 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2fc30 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
2fc40 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
2fc50 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
2fc60 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
2fc70 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
2fc80 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
2fc90 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
2fca0 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
2fcb0 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
2fcc0 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
2fcd0 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
2fce0 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
2fcf0 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
2fd00 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
2fd10 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
2fd20 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
2fd30 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
2fd40 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
2fd50 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
2fd60 65 20 63 61 73 65 20 77 68 65 72 65 20 73 65 74  e case where set
2fd70 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a  s of integers.**
2fd80 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e   are inserted in
2fd90 20 64 69 73 74 69 6e 63 74 20 70 68 61 73 65 73   distinct phases
2fda0 2c 20 77 68 69 63 68 20 65 61 63 68 20 73 65 74  , which each set
2fdb0 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
2fdc0 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63 68  licates..** Each
2fdd0 20 73 65 74 20 69 73 20 69 64 65 6e 74 69 66 69   set is identifi
2fde0 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
2fdf0 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
2fe00 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
2fe10 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
2fe20 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20 68 61  inal set must ha
2fe30 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20 66  ve P4==-1, and f
2fe40 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 65 74  or all other set
2fe50 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  s.** must have P
2fe60 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4>0..**.** This 
2fe70 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
2fe80 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
2fe90 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
2fea0 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
2feb0 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   the RowSet obje
2fec0 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
2fed0 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
2fee0 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
2fef0 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
2ff00 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
2ff10 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
2ff20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
2ff30 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
2ff40 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
2ff50 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
2ff60 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
2ff70 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
2ff80 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
2ff90 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
2ffa0 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
2ffb0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
2ffc0 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
2ffd0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2ffe0 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
2fff0 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
30000 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
30010 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
30020 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
30030 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
30040 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
30050 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
30060 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
30070 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
30080 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
30090 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
300a0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
300b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
300c0 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
300d0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
300e0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
300f0 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
30100 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
30110 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
30120 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
30130 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
30140 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
30150 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
30160 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
30170 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
30180 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
30190 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
301a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
301b0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
301c0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
301d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
301e0 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
301f0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
30200 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
30210 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
30220 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
30230 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
30240 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
30250 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
30260 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
30270 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53  1->u.pRowSet, iS
30280 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
30290 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
302a0 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
302b0 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
302c0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
302d0 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53  p2;.  }.  if( iS
302e0 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
302f0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
30300 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
30310 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
30320 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
30330 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30340 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
30350 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
30360 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
30370 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
30380 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
30390 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
303a0 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
303b0 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
303c0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
303d0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
303e0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
303f0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
30400 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
30410 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
30420 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
30430 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
30440 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
30450 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
30460 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
30470 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
30480 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
30490 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
304a0 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
304b0 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
304c0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
304d0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
304e0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
304f0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
30500 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
30510 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
30520 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
30530 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
30540 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
30550 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
30560 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
30570 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
30580 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
30590 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
305a0 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
305b0 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
305c0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
305d0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
305e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
305f0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
30600 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
30610 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
30620 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
30630 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
30640 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
30650 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30670 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
30680 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
30690 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
306a0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
306c0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
306d0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
306e0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
306f0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
30700 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
30710 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
30720 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
30730 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
30740 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
30750 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
30760 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
30770 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
30780 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
30790 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
307a0 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
307b0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
307c0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
307d0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
307e0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
307f0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
30800 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
30810 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
30820 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
30830 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
30840 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
30850 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
30860 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
30870 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
30880 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
30890 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
308a0 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
308b0 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
308c0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
308d0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
308e0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
308f0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
30900 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
30910 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
30920 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
30930 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
30940 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
30950 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
30960 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
30970 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
30980 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
30990 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
309a0 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
309b0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
309c0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
309d0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
309e0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
309f0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
30a00 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
30a10 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
30a20 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
30a30 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
30a40 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
30a50 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
30a60 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
30a70 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
30a80 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
30a90 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
30aa0 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
30ab0 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
30ac0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
30ad0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
30ae0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
30af0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
30b00 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
30b10 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
30b20 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
30b30 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
30b40 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
30b50 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
30b60 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
30b70 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
30b80 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
30b90 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
30ba0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
30bb0 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
30bc0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
30bd0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
30be0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
30bf0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
30c00 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
30c10 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
30c20 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
30c30 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74  rsion");.    got
30c40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
30c50 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
30c60 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
30c70 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
30c80 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
30c90 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
30ca0 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
30cb0 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
30cc0 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
30cd0 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
30ce0 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
30cf0 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
30d00 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
30d10 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
30d20 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
30d30 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
30d40 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
30d50 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
30d60 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
30d70 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
30d80 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
30d90 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
30da0 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
30db0 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
30dc0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
30dd0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
30de0 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
30df0 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
30e00 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
30e10 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
30e20 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
30e30 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
30e40 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
30e50 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
30e60 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
30e70 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
30e80 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
30e90 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
30ea0 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
30eb0 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
30ec0 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
30ed0 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
30ee0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
30ef0 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20   assert( nMem>0 
30f00 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67  );.    if( pProg
30f10 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e  ram->nCsr==0 ) n
30f20 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65  Mem++;.    nByte
30f30 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
30f40 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
30f50 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
30f60 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
30f80 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
30f90 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
30fa0 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  or*).           
30fb0 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e     + (pProgram->
30fc0 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20  nOp + 7)/8;.    
30fd0 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
30fe0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
30ff0 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
31000 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
31010 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
31020 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
31030 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
31040 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
31050 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
31060 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
31070 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
31080 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
31090 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
310a0 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
310b0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
310c0 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
310d0 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
310e0 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  e->pc = (int)(pO
310f0 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46  p - aOp);.    pF
31100 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e  rame->aMem = p->
31110 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  aMem;.    pFrame
31120 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d  ->nMem = p->nMem
31130 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70  ;.    pFrame->ap
31140 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a  Csr = p->apCsr;.
31150 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72      pFrame->nCur
31160 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72  sor = p->nCursor
31170 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
31180 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
31190 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d  pFrame->nOp = p-
311a0 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >nOp;.    pFrame
311b0 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72  ->token = pProgr
311c0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64 65  am->token;.#ifde
311d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
311e0 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
311f0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78      pFrame->anEx
31200 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a  ec = p->anExec;.
31210 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64  #endif..    pEnd
31220 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
31230 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d  (pFrame)[pFrame-
31240 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20  >nChildMem];.   
31250 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72   for(pMem=VdbeFr
31260 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20  ameMem(pFrame); 
31270 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d  pMem!=pEnd; pMem
31280 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ++){.      pMem-
31290 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
312a0 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d  efined;.      pM
312b0 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
312c0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
312d0 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
312e0 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
312f0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
31300 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
31310 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
31320 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c  dMem .        ||
31330 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72   (pProgram->nCsr
31340 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d 2d  ==0 && pProgram-
31350 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d  >nMem+1==pFrame-
31360 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20  >nChildMem) );. 
31370 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
31380 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
31390 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
313a0 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e 74      assert( (int
313b0 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46  )(pOp - aOp)==pF
313c0 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
313d0 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
313e0 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
313f0 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
31400 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
31410 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
31420 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
31430 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
31440 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44  ge;.  pFrame->nD
31450 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d  bChange = p->db-
31460 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65  >nChange;.  asse
31470 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75 78  rt( pFrame->pAux
31480 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72  Data==0 );.  pFr
31490 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20  ame->pAuxData = 
314a0 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20 70  p->pAuxData;.  p
314b0 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b 0a  ->pAuxData = 0;.
314c0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
314d0 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
314e0 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
314f0 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65 46  m = aMem = VdbeF
31500 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
31510 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72  .  p->nMem = pFr
31520 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a  ame->nChildMem;.
31530 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28    p->nCursor = (
31540 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69  u16)pFrame->nChi
31550 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73  ldCsr;.  p->apCs
31560 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20  r = (VdbeCursor 
31570 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  **)&aMem[p->nMem
31580 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e  ];.  pFrame->aOn
31590 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61 70  ce = (u8*)&p->ap
315a0 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Csr[pProgram->nC
315b0 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 46  sr];.  memset(pF
315c0 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c 20  rame->aOnce, 0, 
315d0 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b  (pProgram->nOp +
315e0 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f 70   7)/8);.  p->aOp
315f0 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61   = aOp = pProgra
31600 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70  m->aOp;.  p->nOp
31610 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70   = pProgram->nOp
31620 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
31630 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
31640 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78  STATUS.  p->anEx
31650 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  ec = 0;.#endif. 
31660 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b   pOp = &aOp[-1];
31670 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
31680 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50   Opcode: Param P
31690 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
316a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
316b0 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e  only ever presen
316c0 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d  t in sub-program
316d0 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65  s called via the
316e0 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20   .** OP_Program 
316f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70  instruction. Cop
31700 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e  y a value curren
31710 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  tly stored in a 
31720 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
31730 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28  of the calling (
31740 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f  parent) frame to
31750 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20   cell P2 in the 
31760 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a  current frames .
31770 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65  ** address space
31780 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
31790 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
317a0 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ms to access the
317b0 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f   new.* .** and o
317c0 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  ld.* values..**.
317d0 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f  ** The address o
317e0 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68  f the cell in th
317f0 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69  e parent frame i
31800 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
31810 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61  adding.** the va
31820 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
31830 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61  gument to the va
31840 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
31850 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a  gument to the.**
31860 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
31870 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
31880 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61  .*/.case OP_Para
31890 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  m: {           /
318a0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
318b0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
318c0 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75   Mem *pIn;.  pOu
318d0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
318e0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46  se(p, pOp);.  pF
318f0 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
31900 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d  ;.  pIn = &pFram
31910 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20  e->aMem[pOp->p1 
31920 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46  + pFrame->aOp[pF
31930 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20  rame->pc].p1];  
31940 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d   .  sqlite3VdbeM
31950 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
31960 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68  ut, pIn, MEM_Eph
31970 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  em);.  break;.}.
31980 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
31990 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
319a0 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
319b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
319c0 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70  OREIGN_KEY./* Op
319d0 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20  code: FkCounter 
319e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
319f0 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50  ynopsis: fkctr[P
31a00 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63  1]+=P2.**.** Inc
31a10 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
31a20 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
31a30 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
31a40 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
31a50 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
31a60 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
31a70 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
31a80 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
31a90 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
31aa0 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
31ab0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
31ac0 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
31ad0 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
31ae0 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
31af0 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
31b00 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
31b10 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
31b20 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
31b30 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
31b40 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61   {.  if( db->fla
31b50 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65  gs & SQLITE_Defe
31b60 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e  rFKs ){.    db->
31b70 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
31b80 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
31b90 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31  else if( pOp->p1
31ba0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
31bb0 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
31bc0 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
31bd0 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
31be0 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
31bf0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
31c00 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
31c10 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
31c20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
31c30 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74  fkctr[P1]==0 got
31c40 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
31c50 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20  opcode tests if 
31c60 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  a foreign key co
31c70 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
31c80 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
31c90 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75  ro..** If so, ju
31ca0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
31cb0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
31cc0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
31cd0 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e   the next .** in
31ce0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
31cf0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
31d00 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d  ro, then the jum
31d10 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
31d20 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
31d30 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a  raint-counter.**
31d40 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e   is zero (the on
31d50 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65  e that counts de
31d60 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
31d70 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49  t violations). I
31d80 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c  f P1 is.** zero,
31d90 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
31da0 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d  en if the statem
31db0 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ent constraint-c
31dc0 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a  ounter is zero.*
31dd0 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  * (immediate for
31de0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
31df0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
31e00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66  .*/.case OP_FkIf
31e10 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Zero: {         
31e20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
31e30 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
31e40 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
31e50 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
31e60 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
31e70 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
31e80 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d   2);.    if( db-
31e90 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
31ea0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
31eb0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67  edImmCons==0 ) g
31ec0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
31ed0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
31ee0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
31ef0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
31f00 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
31f10 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
31f20 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43  .    if( p->nFkC
31f30 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
31f40 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
31f50 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  Cons==0 ) goto j
31f60 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
31f70 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31f80 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
31f90 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
31fa0 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
31fb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
31fc0 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
31fd0 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
31fe0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
31ff0 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72  sis: r[P1]=max(r
32000 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  [P1],r[P2]).**.*
32010 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74  * P1 is a regist
32020 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
32030 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20  rame of this VM 
32040 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20  (the root frame 
32050 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20  is.** different 
32060 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
32070 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69   frame if this i
32080 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65  nstruction is be
32090 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20  ing executed.** 
320a0 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f  within a sub-pro
320b0 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76  gram). Set the v
320c0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
320d0 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d   P1 to the maxim
320e0 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75  um of .** its cu
320f0 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20  rrent value and 
32100 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
32110 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
32120 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
32130 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
32140 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
32150 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
32160 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
32170 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
32180 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
32190 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
321a0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
321b0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
321c0 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
321d0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
321e0 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
321f0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
32200 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
32210 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
32220 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
32230 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
32240 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
32250 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
32260 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
32270 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
32280 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
32290 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
322a0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
322b0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
322c0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
322d0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
322e0 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
322f0 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
32300 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
32310 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
32320 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
32330 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
32340 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
32350 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
32360 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
32370 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20  then r[P1]-=P3, 
32380 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
32390 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
323a0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
323b0 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  r..** If the val
323c0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
323d0 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
323e0 72 2c 20 73 75 62 74 72 61 63 74 20 50 33 20 66  r, subtract P3 f
323f0 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  rom the.** value
32400 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20   in P1 and jump 
32410 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  to P2..**.** If 
32420 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75  the initial valu
32430 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
32440 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c   is less than 1,
32450 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
32460 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20  ue is unchanged 
32470 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73  and control pass
32480 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  es through to th
32490 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
324a0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
324b0 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  fPos: {        /
324c0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
324d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
324e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
324f0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
32500 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
32510 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31  ranchTaken( pIn1
32520 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69  ->u.i>0, 2);.  i
32530 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
32540 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
32550 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20  -= pOp->p3;.    
32560 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
32570 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
32580 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73  ./* Opcode: Offs
32590 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33  etLimit P1 P2 P3
325a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
325b0 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65  : if r[P1]>0 the
325c0 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61  n r[P2]=r[P1]+ma
325d0 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20  x(0,r[P3]) else 
325e0 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a  r[P2]=(-1).**.**
325f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72   This opcode per
32600 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79  forms a commonly
32610 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f   used computatio
32620 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
32630 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f  h.** LIMIT and O
32640 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20  FFSET process.  
32650 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20  r[P1] holds the 
32660 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20  limit counter.  
32670 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74  r[P3].** holds t
32680 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  he offset counte
32690 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63  r.  The opcode c
326a0 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62  omputes the comb
326b0 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66  ined value.** of
326c0 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f   the LIMIT and O
326d0 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73  FFSET and stores
326e0 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72   that value in r
326f0 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d  [P2].  The r[P2]
32700 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74  .** value comput
32710 65 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ed is the total 
32720 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74  number of rows t
32730 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  hat will need to
32740 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69   be.** visited i
32750 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c  n order to compl
32760 65 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a  ete the query..*
32770 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73  *.** If r[P3] is
32780 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76   zero or negativ
32790 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  e, that means th
327a0 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54  ere is no OFFSET
327b0 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
327c0 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 76   set to be the v
327d0 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  alue of the LIMI
327e0 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20  T, r[P1]..**.** 
327f0 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f  if r[P1] is zero
32800 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68   or negative, th
32810 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69  at means there i
32820 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e  s no LIMIT.** an
32830 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74  d r[P2] is set t
32840 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68  o -1. .**.** Oth
32850 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73  erwise, r[P2] is
32860 20 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20   set to the sum 
32870 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50  of r[P1] and r[P
32880 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  3]..*/.case OP_O
32890 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20  ffsetLimit: {   
328a0 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69   /* in1, out2, i
328b0 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20  n3 */.  i64 x;. 
328c0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
328d0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
328e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
328f0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
32900 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
32910 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
32920 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
32930 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
32940 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
32950 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49  _Int );.  x = pI
32960 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78  n1->u.i;.  if( x
32970 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64  <=0 || sqlite3Ad
32980 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d  dInt64(&x, pIn3-
32990 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69  >u.i>0?pIn3->u.i
329a0 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  :0) ){.    /* If
329b0 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65   the LIMIT is le
329c0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
329d0 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66   to zero, loop f
329e0 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20  orever.  This.  
329f0 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74    ** is document
32a00 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69  ed.  But also, i
32a10 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53  f the LIMIT+OFFS
32a20 45 54 20 65 78 63 65 65 64 73 20 32 5e 36 33 20  ET exceeds 2^63 
32a30 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f  then.    ** also
32a40 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20   loop forever.  
32a50 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65  This is undocume
32a60 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20  nted.  In fact, 
32a70 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a  one could argue.
32a80 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
32a90 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d  loop should term
32aa0 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73 73 75  inate.  But assu
32ab0 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69  ming 1 billion i
32ac0 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a  terations.    **
32ad0 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72   per second (far
32ae0 20 65 78 63 65 65 64 69 6e 67 20 74 68 65 20 63   exceeding the c
32af0 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61  apabilities of a
32b00 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72 64 77  ny current hardw
32b10 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77  are).    ** it w
32b20 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79  ould take nearly
32b30 20 33 30 30 20 79 65 61 72 73 20 74 6f 20 61 63   300 years to ac
32b40 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65  tually reach the
32b50 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20   limit.  So.    
32b60 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76  ** looping forev
32b70 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62  er is a reasonab
32b80 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  le approximation
32b90 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75  . */.    pOut->u
32ba0 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  .i = -1;.  }else
32bb0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
32bc0 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = x;.  }.  break
32bd0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
32be0 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20  IfNotZero P1 P2 
32bf0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
32c00 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74  s: if r[P1]!=0 t
32c10 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74  hen r[P1]--, got
32c20 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
32c30 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
32c40 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
32c50 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   If the content 
32c60 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
32c70 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67  s.** initially g
32c80 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
32c90 2c 20 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74  , then decrement
32ca0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
32cb0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66  gister P1..** If
32cc0 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   it is non-zero 
32cd0 28 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73  (negative or pos
32ce0 69 74 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20  itive) and then 
32cf0 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e  also jump to P2.
32d00 20 20 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65    .** If registe
32d10 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
32d20 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74  y zero, leave it
32d30 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66   unchanged and f
32d40 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
32d50 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72  case OP_IfNotZer
32d60 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
32d70 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
32d80 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
32d90 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
32da0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
32db0 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
32dc0 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
32dd0 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
32de0 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20  In1->u.i ){.    
32df0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
32e00 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a   ) pIn1->u.i--;.
32e10 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
32e20 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
32e30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
32e40 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31   DecrJumpZero P1
32e50 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
32e60 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50  opsis: if (--r[P
32e70 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  1])==0 goto P2.*
32e80 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
32e90 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e   must hold an in
32ea0 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e  teger.  Decremen
32eb0 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  t the value in P
32ec0 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f  1.** and jump to
32ed0 20 50 32 20 69 66 20 74 68 65 20 6e 65 77 20 76   P2 if the new v
32ee0 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79 20  alue is exactly 
32ef0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
32f00 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b  _DecrJumpZero: {
32f10 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
32f20 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
32f30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
32f40 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
32f50 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
32f60 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
32f70 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
32f80 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20   pIn1->u.i--;.  
32f90 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
32fa0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29  pIn1->u.i==0, 2)
32fb0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
32fc0 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  i==0 ) goto jump
32fd0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
32fe0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
32ff0 41 67 67 53 74 65 70 30 20 2a 20 50 32 20 50 33  AggStep0 * P2 P3
33000 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
33010 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
33020 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
33030 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
33040 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
33050 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
33060 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
33070 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
33080 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
33090 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
330a0 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72  cDef.** structur
330b0 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
330c0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
330d0 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
330e0 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f  he.** accumulato
330f0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
33100 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
33110 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
33120 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
33130 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f  successors..*/./
33140 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
33150 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  p * P2 P3 P4 P5.
33160 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
33170 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
33180 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
33190 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
331a0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
331b0 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
331c0 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
331d0 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
331e0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
331f0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
33200 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74  text.** object t
33210 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 72  hat is used to r
33220 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  un the function.
33230 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73    Register P3 is
33240 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d  .** as the accum
33250 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
33260 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
33270 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
33280 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
33290 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
332a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
332b0 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  de is initially 
332c0 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53  coded as OP_AggS
332d0 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20  tep0.  On first 
332e0 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74  evaluation,.** t
332f0 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65  he FuncDef store
33300 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65  d in P4 is conve
33310 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c  rted into an sql
33320 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64  ite3_context and
33330 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69  .** the opcode i
33340 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74  s changed.  In t
33350 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69  his way, the ini
33360 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74  tialization of t
33370 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f  he.** sqlite3_co
33380 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65  ntext only happe
33390 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64  ns once, instead
333a0 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c   of on each call
333b0 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20   to the.** step 
333c0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  function..*/.cas
333d0 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b  e OP_AggStep0: {
333e0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69  .  int n;.  sqli
333f0 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
33400 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
33410 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
33420 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70  NCDEF );.  n = p
33430 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
33440 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
33450 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
33460 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
33470 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d   );.  assert( n=
33480 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
33490 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28   && pOp->p2+n<=(
334a0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
334b0 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20  Cursor)+1) );.  
334c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
334d0 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
334e0 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
334f0 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65  .  pCtx = sqlite
33500 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64  3DbMallocRawNN(d
33510 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29  b, sizeof(*pCtx)
33520 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28   + (n-1)*sizeof(
33530 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29  sqlite3_value*))
33540 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20  ;.  if( pCtx==0 
33550 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
33560 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b   pCtx->pMem = 0;
33570 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d  .  pCtx->pFunc =
33580 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
33590 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69    pCtx->iOp = (i
335a0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
335b0 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20    pCtx->pVdbe = 
335c0 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20  p;.  pCtx->argc 
335d0 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79  = n;.  pOp->p4ty
335e0 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b  pe = P4_FUNCCTX;
335f0 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20  .  pOp->p4.pCtx 
33600 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f  = pCtx;.  pOp->o
33610 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74  pcode = OP_AggSt
33620 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ep;.  /* Fall th
33630 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67  rough into OP_Ag
33640 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20  gStep */.}.case 
33650 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
33660 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33  int i;.  sqlite3
33670 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
33680 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
33690 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  em t;..  assert(
336a0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
336b0 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
336c0 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
336d0 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  x;.  pMem = &aMe
336e0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f  m[pOp->p3];..  /
336f0 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69  * If this functi
33700 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20  on is inside of 
33710 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72  a trigger, the r
33720 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e  egister array in
33730 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67   aMem[].  ** mig
33740 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  ht change from o
33750 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f  ne evaluation to
33760 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20   the next.  The 
33770 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  next block of co
33780 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74  de.  ** checks t
33790 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67  o see if the reg
337a0 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20  ister array has 
337b0 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20  changed, and if 
337c0 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69  so it.  ** reini
337d0 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c  tializes the rel
337e0 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74  avant parts of t
337f0 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
33800 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69  xt object */.  i
33810 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d  f( pCtx->pMem !=
33820 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74   pMem ){.    pCt
33830 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a  x->pMem = pMem;.
33840 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
33850 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
33860 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
33870 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
33880 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  +i];.  }..#ifdef
33890 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
338a0 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d  for(i=0; i<pCtx-
338b0 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >argc; i++){.   
338c0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
338d0 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69  lid(pCtx->argv[i
338e0 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
338f0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
33900 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  +i, pCtx->argv[i
33910 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]);.  }.#endif..
33920 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73    pMem->n++;.  s
33930 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69  qlite3VdbeMemIni
33940 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75  t(&t, db, MEM_Nu
33950 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  ll);.  pCtx->pOu
33960 74 20 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e  t = &t;.  pCtx->
33970 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b  fErrorOrAux = 0;
33980 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  .  pCtx->skipFla
33990 67 20 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e  g = 0;.  (pCtx->
339a0 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70  pFunc->xSFunc)(p
339b0 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70  Ctx,pCtx->argc,p
339c0 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49  Ctx->argv); /* I
339d0 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
339e0 30 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  0 */.  if( pCtx-
339f0 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a  >fErrorOrAux ){.
33a00 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73      if( pCtx->is
33a10 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73  Error ){.      s
33a20 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
33a30 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
33a40 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29  _value_text(&t))
33a50 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43 74  ;.      rc = pCt
33a60 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20  x->isError;.    
33a70 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
33a80 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b  eMemRelease(&t);
33a90 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
33aa0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
33ab0 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a  error;.  }else{.
33ac0 20 20 20 20 61 73 73 65 72 74 28 20 74 2e 66 6c      assert( t.fl
33ad0 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  ags==MEM_Null );
33ae0 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 74 78 2d  .  }.  if( pCtx-
33af0 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20  >skipFlag ){.   
33b00 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
33b10 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
33b20 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70  Seq );.    i = p
33b30 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69  Op[-1].p1;.    i
33b40 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64  f( i ) sqlite3Vd
33b50 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
33b60 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a  Mem[i], 1);.  }.
33b70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
33b80 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20  pcode: AggFinal 
33b90 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
33ba0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
33bb0 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a  r[P1] N=P2.**.**
33bc0 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e   Execute the fin
33bd0 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  alizer function 
33be0 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
33bf0 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20  .  P1 is.** the 
33c00 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
33c10 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75  that is the accu
33c20 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20  mulator for the 
33c30 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a  aggregate..**.**
33c40 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
33c50 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
33c60 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
33c70 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
33c80 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
33c90 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
33ca0 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
33cb0 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
33cc0 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
33cd0 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
33ce0 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
33cf0 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
33d00 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
33d10 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
33d20 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
33d30 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
33d40 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
33d50 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
33d60 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e  ed for the degen
33d70 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65  erate case where
33d80 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
33d90 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
33da0 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
33db0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  .*/.case OP_AggF
33dc0 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
33dd0 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
33de0 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
33df0 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
33e00 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
33e10 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
33e20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
33e30 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
33e40 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
33e50 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Agg))==0 );.  
33e60 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
33e70 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d  MemFinalize(pMem
33e80 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29  , pOp->p4.pFunc)
33e90 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
33ea0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
33eb0 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
33ec0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
33ed0 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20  Mem));.    goto 
33ee0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
33ef0 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  or;.  }.  sqlite
33f00 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
33f10 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
33f20 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
33f30 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
33f40 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
33f50 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
33f60 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
33f70 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
33f80 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
33f90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
33fa0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
33fb0 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a  point P1 P2 P3 *
33fc0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f   *.**.** Checkpo
33fd0 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e  int database P1.
33fe0 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
33ff0 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75   if P1 is not cu
34000 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41  rrently in.** WA
34010 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65  L mode. Paramete
34020 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53  r P2 is one of S
34030 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
34040 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a  _PASSIVE, FULL,.
34050 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54  ** RESTART, or T
34060 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20  RUNCATE.  Write 
34070 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b  1 or 0 into mem[
34080 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b  P3] if the check
34090 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a  point returns.**
340a0 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20   SQLITE_BUSY or 
340b0 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c  not, respectivel
340c0 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e 75  y.  Write the nu
340d0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
340e0 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65   the.** WAL afte
340f0 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  r the checkpoint
34100 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20   into mem[P3+1] 
34110 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  and the number o
34120 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68  f pages.** in th
34130 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20  e WAL that have 
34140 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65  been checkpointe
34150 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  d after the chec
34160 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65  kpoint.** comple
34170 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  tes into mem[P3+
34180 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20  2].  However on 
34190 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33  an error, mem[P3
341a0 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50  +1] and.** mem[P
341b0 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c  3+2] are initial
341c0 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63  ized to -1..*/.c
341d0 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  ase OP_Checkpoin
341e0 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20  t: {.  int i;   
341f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34200 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
34210 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
34220 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20  aRes[3];        
34230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
34240 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20  esults */.  Mem 
34250 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
34260 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
34270 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65 72  rite results her
34280 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  e */..  assert( 
34290 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
342a0 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b  ;.  aRes[0] = 0;
342b0 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65  .  aRes[1] = aRe
342c0 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73  s[2] = -1;.  ass
342d0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ert( pOp->p2==SQ
342e0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
342f0 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c  PASSIVE.       |
34300 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
34310 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c  E_CHECKPOINT_FUL
34320 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  L.       || pOp-
34330 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
34340 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20  KPOINT_RESTART. 
34350 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
34360 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
34370 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29  INT_TRUNCATE.  )
34380 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
34390 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70  Checkpoint(db, p
343a0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
343b0 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73   &aRes[1], &aRes
343c0 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 20 29  [2]);.  if( rc )
343d0 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  {.    if( rc!=SQ
343e0 4c 49 54 45 5f 42 55 53 59 20 29 20 67 6f 74 6f  LITE_BUSY ) goto
343f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
34400 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  ror;.    rc = SQ
34410 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
34420 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
34430 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
34440 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
34450 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
34460 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
34470 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
34480 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
34490 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
344a0 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
344b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
344c0 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
344d0 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
344e0 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
344f0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
34500 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
34510 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
34520 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
34530 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
34540 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
34550 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
34560 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
34570 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
34580 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
34590 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
345a0 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
345b0 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
345c0 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
345d0 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
345e0 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
345f0 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
34600 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
34610 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
34620 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
34630 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
34640 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
34650 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
34660 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
34670 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
34680 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
34690 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
346a0 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20  out2 */.  Btree 
346b0 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pBt;           
346c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72            /* Btr
346d0 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75  ee to change jou
346e0 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a  rnal mode of */.
346f0 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63    /* Pager assoc
34720 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a  iated with pBt *
34730 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20  /.  int eNew;   
34740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34750 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e      /* New journ
34760 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  al mode */.  int
34770 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20   eOld;          
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
34790 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20  The old journal 
347a0 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  mode */.#ifndef 
347b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
347c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
347d0 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  ilename;        
347e0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
347f0 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70  abase file for p
34800 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a  Pager */.#endif.
34810 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
34820 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
34830 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e  ;.  eNew = pOp->
34840 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e  p3;.  assert( eN
34850 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
34860 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20  LMODE_DELETE .  
34870 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
34880 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34890 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20  TRUNCATE .      
348a0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
348b0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53  JOURNALMODE_PERS
348c0 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  IST .       || e
348d0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
348e0 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20  ALMODE_OFF.     
348f0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
34900 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
34910 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ORY.       || eN
34920 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
34930 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20  LMODE_WAL.      
34940 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
34950 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
34960 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Y.  );.  assert(
34970 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
34980 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
34990 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
349a0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
349b0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
349c0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
349d0 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
349e0 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
349f0 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
34a00 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
34a10 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
34a20 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
34a30 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
34a40 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
34a50 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
34a60 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
34a70 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
34a80 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
34a90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34aa0 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
34ab0 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
34ac0 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
34ad0 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f  er, 1);..  /* Do
34ae0 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61   not allow a tra
34af0 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e  nsition to journ
34b00 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20  al_mode=WAL for 
34b10 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
34b20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  in temporary sto
34b30 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56  rage or if the V
34b40 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  FS does not supp
34b50 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72  ort shared memor
34b60 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e  y .  */.  if( eN
34b70 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
34b80 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20  LMODE_WAL.   && 
34b90 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30  (sqlite3Strlen30
34ba0 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20  (zFilename)==0  
34bb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70           /* Temp
34bc0 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20   file */.       
34bd0 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  || !sqlite3Pager
34be0 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61  WalSupported(pPa
34bf0 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68  ger))   /* No sh
34c00 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70  ared-memory supp
34c10 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20  ort */.  ){.    
34c20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
34c30 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65  ..  if( (eNew!=e
34c40 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64  Old).   && (eOld
34c50 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34c60 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d  ODE_WAL || eNew=
34c70 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34c80 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20  DE_WAL).  ){.   
34c90 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
34ca0 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62  mmit || db->nVdb
34cb0 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20  eRead>1 ){.     
34cc0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
34cd0 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  OR;.      sqlite
34ce0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20  3VdbeError(p,.  
34cf0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
34d00 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
34d10 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
34d20 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
34d30 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
34d40 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34d50 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
34d60 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
34d70 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   );.      goto a
34d80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
34d90 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  r;.    }else{. .
34da0 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
34db0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34dc0 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
34dd0 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
34de0 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
34df0 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
34e00 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
34e10 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
34e20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
34e30 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
34e40 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
34e50 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
34e60 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
34e70 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
34e80 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
34e90 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
34ea0 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
34eb0 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
34ec0 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
34ed0 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
34ee0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
34ef0 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
34f00 50 61 67 65 72 2c 20 64 62 29 3b 0a 20 20 20 20  Pager, db);.    
34f10 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
34f20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
34f30 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
34f40 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
34f50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20  ager, eNew);.   
34f60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
34f70 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47  se if( eOld==PAG
34f80 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
34f90 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20  EMORY ){.       
34fa0 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73   /* Cannot trans
34fb0 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66  ition directly f
34fc0 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41  rom MEMORY to WA
34fd0 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46  L.  Use mode OFF
34fe0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61  .        ** as a
34ff0 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a  n intermediate *
35000 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
35010 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
35020 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47  Mode(pPager, PAG
35030 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
35040 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  FF);.      }.  .
35050 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20        /* Open a 
35060 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
35070 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
35080 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
35090 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  the journal.    
350a0 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20    ** mode, this 
350b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61  transaction alwa
350c0 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61  ys uses a rollba
350d0 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20  ck journal..    
350e0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
350f0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
35100 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30  sInTrans(pBt)==0
35110 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63   );.      if( rc
35120 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
35130 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
35140 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69  te3BtreeSetVersi
35150 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50  on(pBt, (eNew==P
35160 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
35170 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a  _WAL ? 2 : 1));.
35180 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
35190 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64  }.#endif /* ifnd
351a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
351b0 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20  AL */..  if( rc 
351c0 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20  ) eNew = eOld;. 
351d0 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50   eNew = sqlite3P
351e0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
351f0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
35200 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ;..  pOut->flags
35210 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
35220 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
35230 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61    pOut->z = (cha
35240 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e  r *)sqlite3Journ
35250 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29  alModename(eNew)
35260 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71  ;.  pOut->n = sq
35270 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
35280 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e  ut->z);.  pOut->
35290 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
352a0 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  8;.  sqlite3Vdbe
352b0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
352c0 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Out, encoding);.
352d0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
352e0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
352f0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  or;.  break;.};.
35300 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
35310 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
35320 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
35330 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
35340 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
35350 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
35360 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
35370 75 75 6d 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  uum P1 * * * *.*
35380 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
35390 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
353a0 50 31 2e 20 20 50 31 20 69 73 20 30 20 66 6f 72  P1.  P1 is 0 for
353b0 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20 32 20 6f   "main", and 2 o
353c0 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20 61 6e  r more.** for an
353d0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
353e0 73 65 2e 20 20 54 68 65 20 22 74 65 6d 70 22 20  se.  The "temp" 
353f0 64 61 74 61 62 61 73 65 20 6d 61 79 20 6e 6f 74  database may not
35400 20 62 65 20 76 61 63 75 75 6d 65 64 2e 0a 2a 2f   be vacuumed..*/
35410 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
35420 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
35430 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
35440 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
35450 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
35460 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e 70 31 29  sg, db, pOp->p1)
35470 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
35480 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
35490 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
354a0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
354b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
354c0 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a  T_AUTOVACUUM)./*
354d0 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63   Opcode: IncrVac
354e0 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  uum P1 P2 * * *.
354f0 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20  **.** Perform a 
35500 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74  single step of t
35510 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  he incremental v
35520 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20  acuum procedure 
35530 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74  on.** the P1 dat
35540 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61  abase. If the va
35550 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65  cuum has finishe
35560 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  d, jump to instr
35570 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74  uction.** P2. Ot
35580 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
35590 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
355a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
355b0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61  /.case OP_IncrVa
355c0 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  cuum: {        /
355d0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65  * jump */.  Btre
355e0 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
355f0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
35600 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
35610 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
35620 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
35630 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
35640 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
35650 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
35660 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
35670 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72  Op->p1].pBt;.  r
35680 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
35690 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b  IncrVacuum(pBt);
356a0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
356b0 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  en(rc==SQLITE_DO
356c0 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  NE,2);.  if( rc 
356d0 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  ){.    if( rc!=S
356e0 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74  QLITE_DONE ) got
356f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
35700 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53  rror;.    rc = S
35710 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f  QLITE_OK;.    go
35720 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
35730 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
35740 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
35750 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
35760 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
35770 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
35780 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e  ments to expire.
35790 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65    When an expire
357a0 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69  d statement.** i
357b0 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67  s executed using
357c0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
357d0 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61  it will either a
357e0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
357f0 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66  reprepare itself
35800 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67   (if it was orig
35810 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75  inally created u
35820 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
35830 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72  pare_v2()).** or
35840 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69   it will fail wi
35850 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  th SQLITE_SCHEMA
35860 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
35870 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
35880 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
35890 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
358a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
358b0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
358c0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
358d0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
358e0 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61  s expired..*/.ca
358f0 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
35900 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
35910 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
35920 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
35930 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
35940 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
35950 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
35960 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
35970 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
35980 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
35990 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
359a0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
359b0 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20  ynopsis: iDb=P1 
359c0 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33  root=P2 write=P3
359d0 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
359e0 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
359f0 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
35a00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
35a10 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
35a20 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
35a30 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
35a40 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
35a50 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
35a60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
35a70 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
35a80 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
35a90 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
35aa0 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
35ab0 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
35ac0 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
35ad0 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
35ae0 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
35af0 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
35b00 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
35b10 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
35b20 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
35b30 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
35b40 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
35b50 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
35b60 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
35b70 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
35b80 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
35b90 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
35ba0 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
35bb0 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
35bc0 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
35bd0 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
35be0 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
35bf0 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  ;.  if( isWriteL
35c00 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
35c10 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
35c20 55 6e 63 6f 6d 6d 69 74 29 20 29 7b 0a 20 20 20  Uncommit) ){.   
35c30 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
35c40 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
35c50 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
35c60 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
35c70 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
35c80 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20  >btreeMask, p1) 
35c90 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
35ca0 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
35cb0 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
35cc0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
35cd0 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
35ce0 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
35cf0 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
35d00 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
35d10 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66  ( rc ){.      if
35d20 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
35d30 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
35d40 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
35d50 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
35d60 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
35d70 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61  VdbeError(p, "da
35d80 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
35d90 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
35da0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
35db0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35dc0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
35dd0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
35de0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35df0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
35e00 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
35e10 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
35e20 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
35e30 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
35e40 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
35e50 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
35e60 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
35e70 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
35e80 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
35e90 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
35ea0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
35eb0 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
35ec0 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
35ed0 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
35ee0 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
35ef0 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
35f00 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
35f10 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
35f20 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
35f30 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
35f40 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
35f50 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
35f60 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
35f70 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
35f80 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
35f90 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
35fa0 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
35fb0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
35fc0 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
35fd0 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73 71    if( pVTab ) sq
35fe0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
35ff0 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e  rrmsg(p, pVTab->
36000 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
36010 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
36020 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
36030 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
36040 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36050 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
36060 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36070 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
36080 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
36090 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
360a0 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69  .** P2 is a regi
360b0 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ster that holds 
360c0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
360d0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
360e0 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20  atabase .** P1. 
360f0 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
36100 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
36110 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
36120 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20  OP_VCreate: {.  
36130 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
36140 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
36150 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
36160 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
36170 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
36180 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
36190 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
361a0 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d  */..  memset(&sM
361b0 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
361c0 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20  em));.  sMem.db 
361d0 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75  = db;.  /* Becau
361e0 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20  se P2 is always 
361f0 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c  a static string,
36200 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
36210 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  e for the.  ** s
36220 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
36230 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20  y() to fail */. 
36240 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
36250 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
36260 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20  MEM_Str)!=0 );. 
36270 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
36280 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
36290 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29  MEM_Static)!=0 )
362a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
362b0 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65  VdbeMemCopy(&sMe
362c0 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  m, &aMem[pOp->p2
362d0 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  ]);.  assert( rc
362e0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
362f0 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63   zTab = (const c
36300 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
36310 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a  ue_text(&sMem);.
36320 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c    assert( zTab |
36330 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
36340 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62  ed );.  if( zTab
36350 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
36360 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
36370 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
36380 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  zTab, &p->zErrMs
36390 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  g);.  }.  sqlite
363a0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
363b0 26 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72 63  &sMem);.  if( rc
363c0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
363d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
363e0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
363f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36400 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
36410 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36420 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
36430 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
36440 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
36450 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
36460 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
36470 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
36480 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
36490 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
364a0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
364b0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
364c0 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e  estroy: {.  db->
364d0 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72  nVDestroy++;.  r
364e0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
364f0 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
36500 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
36510 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  z);.  db->nVDest
36520 72 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20  roy--;.  if( rc 
36530 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
36540 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
36550 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
36560 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
36570 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
36580 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
36590 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
365a0 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50   Opcode: VOpen P
365b0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
365c0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
365d0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
365e0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
365f0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
36600 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20  cture..** P1 is 
36610 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  a cursor number.
36620 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70    This opcode op
36630 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ens a cursor to 
36640 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
36650 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20  able and stores 
36660 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50  that cursor in P
36670 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f  1..*/.case OP_VO
36680 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
36690 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c  sor *pCur;.  sql
366a0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
366b0 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74   *pVCur;.  sqlit
366c0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
366d0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
366e0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
366f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
36700 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43  IsReader );.  pC
36710 75 72 20 3d 20 30 3b 0a 20 20 70 56 43 75 72 20  ur = 0;.  pVCur 
36720 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
36730 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
36740 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62  tab;.  if( pVtab
36750 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74  ==0 || NEVER(pVt
36760 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20  ab->pModule==0) 
36770 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
36780 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67  TE_LOCKED;.    g
36790 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
367a0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d  _error;.  }.  pM
367b0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
367c0 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70  Module;.  rc = p
367d0 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
367e0 74 61 62 2c 20 26 70 56 43 75 72 29 3b 0a 20 20  tab, &pVCur);.  
367f0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
36800 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
36810 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
36820 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36830 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69  error;..  /* Ini
36840 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f  tialize sqlite3_
36850 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65  vtab_cursor base
36860 20 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43 75   class */.  pVCu
36870 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
36880 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  ;..  /* Initiali
36890 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f  ze vdbe cursor o
368a0 62 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75 72 20  bject */.  pCur 
368b0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
368c0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  (p, pOp->p1, 0, 
368d0 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42  -1, CURTYPE_VTAB
368e0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 20 29 7b  );.  if( pCur ){
368f0 0a 20 20 20 20 70 43 75 72 2d 3e 75 63 2e 70 56  .    pCur->uc.pV
36900 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20 20 20  Cur = pVCur;.   
36910 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a   pVtab->nRef++;.
36920 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
36930 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  ert( db->mallocF
36940 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d 6f  ailed );.    pMo
36950 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43  dule->xClose(pVC
36960 75 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ur);.    goto no
36970 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _mem;.  }.  brea
36980 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
36990 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
369a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
369b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
369c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
369d0 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
369e0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
369f0 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e   Synopsis: iplan
36a00 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34  =r[P3] zplan='P4
36a10 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  '.**.** P1 is a 
36a20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73  cursor opened us
36a30 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69  ing VOpen.  P2 i
36a40 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20  s an address to 
36a50 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68  jump to if.** th
36a60 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c  e filtered resul
36a70 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a  t set is empty..
36a80 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68  **.** P4 is eith
36a90 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72  er NULL or a str
36aa0 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e  ing that was gen
36ab0 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42  erated by the xB
36ac0 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68  estIndex.** meth
36ad0 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
36ae0 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74  .  The interpret
36af0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20  ation of the P4 
36b00 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a  string is left.*
36b10 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  * to the module 
36b20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
36b30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
36b40 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46  e invokes the xF
36b50 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
36b60 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
36b70 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62  e specified.** b
36b80 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67  y P1.  The integ
36b90 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61  er query plan pa
36ba0 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74  rameter to xFilt
36bb0 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  er is stored in 
36bc0 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20  register.** P3. 
36bd0 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74  Register P3+1 st
36be0 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61  ores the argc pa
36bf0 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61  rameter to be pa
36c00 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78  ssed to the.** x
36c10 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52  Filter method. R
36c20 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50  egisters P3+2..P
36c30 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65  3+1+argc are the
36c40 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f   argc.** additio
36c50 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77  nal parameters w
36c60 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20  hich are passed 
36c70 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73  to.** xFilter as
36c80 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20   argv. Register 
36c90 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67  P3+2 becomes arg
36ca0 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64  v[0] when passed
36cb0 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a   to xFilter..**.
36cc0 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64  ** A jump is mad
36cd0 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72  e to P2 if the r
36ce0 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20  esult set after 
36cf0 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20  filtering would 
36d00 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73  be empty..*/.cas
36d10 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20  e OP_VFilter: { 
36d20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
36d30 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
36d40 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73  Query;.  const s
36d50 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
36d60 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
36d70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41  Query;.  Mem *pA
36d80 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc;.  sqlite3_v
36d90 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75  tab_cursor *pVCu
36da0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
36db0 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
36dc0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
36dd0 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
36de0 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
36df0 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d  ..  pQuery = &aM
36e00 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
36e10 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31  Argc = &pQuery[1
36e20 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  ];.  pCur = p->a
36e30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
36e40 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
36e50 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20  lid(pQuery) );. 
36e60 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
36e70 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29  pOp->p3, pQuery)
36e80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
36e90 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
36ea0 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 56  YPE_VTAB );.  pV
36eb0 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  Cur = pCur->uc.p
36ec0 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  VCur;.  pVtab = 
36ed0 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
36ee0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
36ef0 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
36f00 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
36f10 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
36f20 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
36f30 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
36f40 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
36f50 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
36f60 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
36f70 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
36f80 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
36f90 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
36fa0 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
36fb0 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
36fc0 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20  thod */.  res = 
36fd0 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  0;.  apArg = p->
36fe0 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d  apArg;.  for(i =
36ff0 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   0; i<nArg; i++)
37000 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d  {.    apArg[i] =
37010 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
37020 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  }.  rc = pModule
37030 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75 72 2c  ->xFilter(pVCur,
37040 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
37050 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
37060 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
37070 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
37080 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20  Vtab);.  if( rc 
37090 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
370a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73  _to_error;.  res
370b0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
370c0 28 70 56 43 75 72 29 3b 0a 20 20 70 43 75 72 2d  (pVCur);.  pCur-
370d0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
370e0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
370f0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
37100 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
37110 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
37120 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
37130 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37140 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
37150 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
37160 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
37170 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31  code: VColumn P1
37180 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
37190 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63  nopsis: r[P3]=vc
371a0 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20  olumn(P2).**.** 
371b0 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
371c0 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
371d0 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
371e0 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
371f0 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
37200 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
37210 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
37220 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
37230 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
37240 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
37250 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
37260 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
37270 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
37280 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
37290 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
372a0 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
372b0 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
372c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
372d0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
372e0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
372f0 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65  E_VTAB );.  asse
37300 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
37310 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
37320 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
37330 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
37340 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
37350 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
37360 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
37370 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
37380 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
37390 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
373a0 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
373b0 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
373c0 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  pCur->uc.pVCur->
373d0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
373e0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
373f0 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
37400 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
37410 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
37420 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
37430 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f  Context));.  sCo
37440 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65  ntext.pOut = pDe
37450 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  st;.  MemSetType
37460 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
37470 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d  Null);.  rc = pM
37480 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
37490 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26  Cur->uc.pVCur, &
374a0 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70  sContext, pOp->p
374b0 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  2);.  sqlite3Vta
374c0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
374d0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73   pVtab);.  if( s
374e0 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20  Context.isError 
374f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e  ){.    rc = sCon
37500 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20  text.isError;.  
37510 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
37520 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44  hangeEncoding(pD
37530 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  est, encoding);.
37540 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
37550 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
37560 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
37570 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
37580 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
37590 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
375a0 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
375b0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
375c0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
375d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
375e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
375f0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
37600 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
37610 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
37620 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
37630 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
37640 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
37650 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
37660 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
37670 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
37680 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
37690 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
376a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
376b0 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
376c0 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
376d0 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
376e0 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
376f0 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
37700 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
37710 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
37720 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
37730 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
37740 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
37750 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
37760 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
37770 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
37780 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
37790 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
377a0 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
377b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
377c0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65   assert( pCur->e
377d0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
377e0 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70  _VTAB );.  if( p
377f0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
37800 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
37810 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75   pVtab = pCur->u
37820 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
37830 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
37840 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
37850 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
37860 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
37870 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
37880 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
37890 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
378a0 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
378b0 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
378c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
378d0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
378e0 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
378f0 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
37900 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
37910 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
37920 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
37930 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
37940 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
37950 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
37960 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
37970 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
37980 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
37990 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
379a0 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
379b0 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
379c0 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
379d0 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f  .  */.  rc = pMo
379e0 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72  dule->xNext(pCur
379f0 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 73  ->uc.pVCur);.  s
37a00 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
37a10 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
37a20 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
37a30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37a40 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d  rror;.  res = pM
37a50 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
37a60 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 56  ->uc.pVCur);.  V
37a70 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21  dbeBranchTaken(!
37a80 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72  res,2);.  if( !r
37a90 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  es ){.    /* If 
37aa0 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a  there is data, j
37ab0 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
37ac0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
37ad0 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
37ae0 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20  nterrupt;.  }.  
37af0 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
37b00 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64  nterrupt;.}.#end
37b10 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
37b20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
37b30 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
37b40 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
37b50 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
37b60 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34  Rename P1 * * P4
37b70 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
37b80 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
37b90 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
37ba0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
37bb0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
37bc0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
37bd0 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
37be0 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20  ponding xRename 
37bf0 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75  method. The valu
37c00 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72  e.** in register
37c10 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73   P1 is passed as
37c20 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d   the zName argum
37c30 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61  ent to the xRena
37c40 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61  me method..*/.ca
37c50 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b  se OP_VRename: {
37c60 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
37c70 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70  *pVtab;.  Mem *p
37c80 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d  Name;..  pVtab =
37c90 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
37ca0 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d  pVtab;.  pName =
37cb0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
37cc0 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62  .  assert( pVtab
37cd0 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
37ce0 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  me );.  assert( 
37cf0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65  memIsValid(pName
37d00 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
37d10 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
37d20 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
37d30 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65  E(pOp->p1, pName
37d40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61  );.  assert( pNa
37d50 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  me->flags & MEM_
37d60 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73  Str );.  testcas
37d70 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
37d80 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
37d90 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
37da0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
37db0 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61  16BE );.  testca
37dc0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
37dd0 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
37de0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
37df0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
37e00 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45  ng(pName, SQLITE
37e10 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63  _UTF8);.  if( rc
37e20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
37e30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63  e_to_error;.  rc
37e40 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
37e50 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
37e60 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73  , pName->z);.  s
37e70 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
37e80 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
37e90 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d  ;.  p->expired =
37ea0 20 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67   0;.  if( rc ) g
37eb0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
37ec0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
37ed0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
37ee0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
37ef0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
37f00 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
37f10 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
37f20 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d   Synopsis: data=
37f30 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50  r[P3@P2].**.** P
37f40 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
37f50 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
37f60 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
37f70 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
37f80 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
37f90 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
37fa0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55  corresponding xU
37fb0 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32  pdate method. P2
37fc0 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63   values.** are c
37fd0 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79  ontiguous memory
37fe0 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20   cells starting 
37ff0 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f  at P3 to pass to
38000 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a   the xUpdate .**
38010 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65   invocation. The
38020 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
38030 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72  er (P3+P2-1) cor
38040 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
38050 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74  .** p2th element
38060 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72   of the argv arr
38070 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70  ay passed to xUp
38080 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  date..**.** The 
38090 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77  xUpdate method w
380a0 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20  ill do a DELETE 
380b0 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  or an INSERT or 
380c0 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67  both..** The arg
380d0 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68  v[0] element (wh
380e0 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ich corresponds 
380f0 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
38100 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77  3).** is the row
38110 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64  id of a row to d
38120 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b  elete.  If argv[
38130 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  0] is NULL then 
38140 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20  no .** deletion 
38150 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67  occurs.  The arg
38160 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20  v[1] element is 
38170 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
38180 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54   new .** row.  T
38190 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20  his can be NULL 
381a0 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74  to have the virt
381b0 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74  ual table select
381c0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
381d0 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20  id for itself.  
381e0 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65  The subsequent e
381f0 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  lements in the a
38200 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65  rray are .** the
38210 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
38220 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ns in the new ro
38230 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d  w..**.** If P2==
38240 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74  1 then no insert
38250 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   is performed.  
38260 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72  argv[0] is the r
38270 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77  owid of.** a row
38280 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a   to delete..**.*
38290 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61  * P1 is a boolea
382a0 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73  n flag. If it is
382b0 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64   set to true and
382c0 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c   the xUpdate cal
382d0 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66  l.** is successf
382e0 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ul, then the val
382f0 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
38300 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
38310 72 74 5f 72 6f 77 6