/ Hex Artifact Content
Login

Artifact f0c2e2fb8cbff761ea8602058406c151b9325e8d:


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 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65  orter(x) ((x)->e
1810: 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1820: 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20  _SORTER)../*.** 
1830: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1840: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1850: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1860: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1870: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1880: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1890: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
18a0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18b0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18c0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18d0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18e0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18f0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1900: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1910: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1920: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1930: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1940: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1950: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1960: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1970: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1990: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
19a0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19b0: 75 38 20 65 43 75 72 54 79 70 65 20 20 20 20 20  u8 eCurType     
19c0: 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
19d0: 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19e0: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
19f0: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1a00: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1a10: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1a20: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1a30: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1a40: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1a50: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1a60: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1a70: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1a80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1a90: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1aa0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1ab0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1ac0: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1ad0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1ae0: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1af0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b00: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b10: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b20: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1b30: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1b40: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1b50: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1b60: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1b70: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1b80: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1b90: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ba0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1bb0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1bc0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1bd0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1be0: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1bf0: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c00: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c10: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c20: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1c30: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1c40: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1c50: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1c60: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1c70: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1c80: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1c90: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1ca0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1cb0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1cc0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1cd0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1ce0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1cf0: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d00: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d10: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d20: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1d30: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1d40: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1d50: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1d60: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1d70: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1d80: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1d90: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1da0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1db0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1dc0: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1dd0: 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69 7a        ROUND8(siz
1de0: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29  eof(VdbeCursor))
1df0: 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32 29   + 2*sizeof(u32)
1e00: 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20 20  *nField + .     
1e10: 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54   (eCurType==CURT
1e20: 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69 74 65  YPE_BTREE?sqlite
1e30: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e40: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
1e50: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1e60: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1e70: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1e80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1e90: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ea0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1eb0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1ec0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1ed0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ee0: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
1ef0: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
1f00: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1f10: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1f20: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1f30: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
1f40: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
1f50: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
1f60: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
1f70: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
1f80: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
1f90: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
1fa0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
1fb0: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
1fc0: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
1fd0: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
1fe0: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ff0: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2000: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2010: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2020: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2030: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2040: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
2050: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
2060: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2070: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
2080: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2090: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
20a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
20b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
20c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
20d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
20e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
20f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2100: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2110: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2120: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2130: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2140: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2150: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2160: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2170: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2180: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2190: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
21a0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
21b0: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
21c0: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
21d0: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
21e0: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
21f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2200: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2210: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2220: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2230: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2240: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
2250: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
2260: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
2270: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
2280: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2290: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
22a0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
22b0: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
22c0: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
22d0: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
22e0: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
22f0: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2300: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2310: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2320: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2330: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2340: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
2350: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2360: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
2370: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
2380: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
2390: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23a0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
23b0: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
23c0: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
23d0: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
23e0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
23f0: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2410: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2420: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2430: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2440: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
2450: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2460: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2470: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
2480: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
2490: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
24a0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
24b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
24c0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
24d0: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
24e0: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
24f0: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2500: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2510: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2520: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2530: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2540: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2550: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
2560: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2570: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2580: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2590: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25a0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25b0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
25c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
25d0: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
25e0: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
25f0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2600: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2610: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2620: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2630: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2640: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2650: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
2660: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2670: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2680: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2690: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26a0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26b0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
26c0: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
26d0: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
26e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26f0: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2700: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2710: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2720: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2730: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2740: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
2760: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
2770: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2780: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2790: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27b0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
27c0: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
27d0: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
27e0: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
27f0: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2800: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2810: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2820: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2830: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2840: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2850: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
2860: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
2870: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
2880: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2890: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
28a0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
28b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
28d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
28e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
28f0: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2900: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2920: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2930: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2940: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2960: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2970: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2980: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
29a0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29b0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
29c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
29d0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
29e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
29f0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2a00: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2a10: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2a20: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2a30: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2a40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2a50: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2a60: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2a70: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a80: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a90: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2aa0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2ab0: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2ac0: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2ad0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2ae0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2af0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2b00: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2b10: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2b20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2b30: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2b40: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2b50: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b60: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b70: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b80: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b90: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2ba0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2bb0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2bc0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2bd0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2be0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2bf0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2c00: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2c10: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2c20: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2c30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2c40: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2c50: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c60: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ca0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2cb0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2cc0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2cd0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2ce0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2d10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2d20: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2d40: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2d50: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2d60: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d70: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d80: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d90: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2da0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2db0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2dc0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2de0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2df0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2e00: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e10: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e20: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e30: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e40: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2e60: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2e70: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2e80: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2e90: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ea0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
2eb0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
2ec0: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
2ed0: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
2ee0: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
2ef0: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
2f00: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
2f10: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
2f20: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
2f30: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
2f40: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
2f50: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
2f60: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
2f70: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
2f80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2f90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2fa0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2fb0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2fc0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2fd0: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
2fe0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
2ff0: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3000: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3010: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3020: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3030: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3040: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3050: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3060: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
3070: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
3080: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
3090: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
30a0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
30b0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
30c0: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
30d0: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
30e0: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
30f0: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3100: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3110: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3120: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3130: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3140: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3150: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
3160: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
3170: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
3180: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
3190: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
31c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
31d0: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
31e0: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3200: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3210: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3220: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3230: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3240: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3250: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
3260: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
3270: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3280: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
3290: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
32a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
32b0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
32c0: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
32d0: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
32e0: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
32f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3300: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3310: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3320: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3330: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3340: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3350: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
3360: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
3370: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
3380: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
3390: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
33a0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
33b0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
33c0: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
33d0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
33e0: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3410: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3420: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3430: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3440: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3450: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3460: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3470: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3480: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3490: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
34a0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
34b0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
34c0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
34d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
34e0: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3570: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3580: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3590: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
35a0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
35b0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
35c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
35d0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
35e0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
35f0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3600: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3610: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3620: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3640: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3650: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
3660: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3670: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3680: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3690: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
36a0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
36b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
36c0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
36d0: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
36e0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
36f0: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3700: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3710: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3720: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3760: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3770: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3780: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3790: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
37a0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
37b0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
37c0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
37d0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
37e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
37f0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3800: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3810: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3820: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3830: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3850: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3860: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3870: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3880: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3890: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
38a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
38b0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
38c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
38d0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
38e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
38f0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3900: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3910: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3920: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3930: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3940: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3950: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3960: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3970: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3980: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3990: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
39a0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
39b0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
39c0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
39d0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
39e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
39f0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3a00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3a10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3a20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3a30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3a50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3a80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3a90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3aa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ab0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ac0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3ad0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3ae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3af0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3b00: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3b10: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3b20: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3b30: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3b40: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3b50: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3b60: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3b70: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3b80: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3b90: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3ba0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3bb0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3bc0: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3bd0: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3be0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bf0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3c00: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3c10: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3c20: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3c30: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c40: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3c50: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3c60: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3c80: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3cb0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3cc0: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3cd0: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3cf0: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3d00: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3d10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3d20: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3d40: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3d50: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3d60: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3d70: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3d80: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3d90: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3da0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3db0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
3dc0: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
3dd0: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
3de0: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
3df0: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
3e00: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
3e10: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
3e20: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
3e30: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
3e40: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
3e50: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3e60: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
3e70: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
3e80: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3e90: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
3ea0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3eb0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
3ec0: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
3ed0: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
3ee0: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
3ef0: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
3f00: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
3f10: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
3f20: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
3f30: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
3f40: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
3f50: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
3f60: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
3f70: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3f80: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
3f90: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
3fa0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
3fb0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
3fc0: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
3fd0: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
3fe0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
3ff0: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4000: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4010: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4020: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4030: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4040: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4050: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
4060: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
4070: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
4080: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
4090: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
40a0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
40b0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
40c0: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
40d0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
40e0: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
40f0: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4100: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4110: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4120: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4130: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4140: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4150: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
4160: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
4170: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
4180: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
4190: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
41a0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
41b0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
41c0: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
41d0: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
41e0: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
41f0: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4200: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4210: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4220: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4230: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4240: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4250: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
4260: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
4270: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
4280: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
4290: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
42a0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
42b0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
42c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
42d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
42e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
42f0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
4300: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
4310: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
4320: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
4330: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
4340: 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32  .    return out2
4350: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4360: 65 61 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ear(pOut);.  }el
4370: 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  se{.    pOut->fl
4380: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
4390: 20 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a     return pOut;.
43a0: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78    }.}.../*.** Ex
43b0: 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66  ecute as much of
43c0: 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20   a VDBE program 
43d0: 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68  as we can..** Th
43e0: 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f  is is the core o
43f0: 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  f sqlite3_step()
4400: 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .  .*/.int sqlit
4410: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
4420: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
4430: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4440: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20  VDBE */.){.  Op 
4450: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4460: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4470: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4480: 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20  p *pOp = aOp;   
4490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
44a0: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
44b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
44c0: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
44d0: 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46  efined(VDBE_PROF
44e0: 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67  ILE).  Op *pOrig
44f0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4500: 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f    /* Value of pO
4510: 70 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  p at the top of 
4520: 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64  the loop */.#end
4530: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4540: 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78  _DEBUG.  int nEx
4550: 74 72 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20  traDelete = 0;  
4560: 20 20 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20      /* Verifies 
4570: 46 4f 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55  FORDELETE and AU
4580: 58 44 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f  XDELETE flags */
4590: 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63  .#endif.  int rc
45a0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
45b0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
45c0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
45d0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
45e0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
45f0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
4600: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
4610: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
4620: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
4630: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
4640: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
4650: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4660: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4670: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
4680: 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20   int iCompare = 
4690: 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  0;          /* R
46a0: 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50  esult of last OP
46b0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69  _Compare operati
46c0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
46d0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
46e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
46f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
4700: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
4710: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4720: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4730: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
4740: 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20  essLimit = 0;/* 
4750: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
4760: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
4770: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
4780: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
4790: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
47a0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
47b0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
47c0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
47d0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
47e0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47f0: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
4800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
4810: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
4820: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
4830: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4840: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
4850: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4860: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4870: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4880: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
4890: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
48a0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
48b0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
48c0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
48d0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
48e0: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
48f0: 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76  wid;  /* Saved v
4900: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74  alue of the last
4910: 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f   insert ROWID */
4920: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4930: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4940: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4950: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4960: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4970: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
4980: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
4990: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
49a0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
49b0: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
49c0: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
49d0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
49e0: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
49f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4a00: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4a10: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4a20: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4a30: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4a40: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4a50: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4a60: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4a70: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4a80: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
4a90: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
4aa0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
4ab0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
4ac0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
4ad0: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
4ae0: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73  ITE_BUSY );.  as
4af0: 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
4b00: 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c  er || p->readOnl
4b10: 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20  y!=0 );.  p->rc 
4b20: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70  = SQLITE_OK;.  p
4b30: 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d  ->iCurrentTime =
4b40: 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
4b50: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4b60: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4b70: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4b80: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4b90: 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73  .  if( db->u1.is
4ba0: 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f  Interrupted ) go
4bb0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
4bc0: 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c  interrupt;.  sql
4bd0: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
4be0: 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53  ql(p);.#ifndef S
4bf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4c00: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
4c10: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
4c20: 20 29 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69   ){.    u32 iPri
4c30: 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72  or = p->aCounter
4c40: 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
4c50: 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20  US_VM_STEP];.   
4c60: 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d   assert( 0 < db-
4c70: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b  >nProgressOps );
4c80: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
4c90: 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72  mit = db->nProgr
4ca0: 65 73 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72  essOps - (iPrior
4cb0: 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   % db->nProgress
4cc0: 4f 70 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Ops);.  }.#endif
4cd0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4ce0: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
4cf0: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4d00: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
4d10: 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e  0.   && (p->db->
4d20: 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f  flags & (SQLITE_
4d30: 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49  VdbeListing|SQLI
4d40: 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54  TE_VdbeEQP|SQLIT
4d50: 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30  E_VdbeTrace))!=0
4d60: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  .  ){.    int i;
4d70: 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20  .    int once = 
4d80: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  1;.    sqlite3Vd
4d90: 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20  bePrintSql(p);. 
4da0: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
4db0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4dc0: 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20  eListing ){.    
4dd0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
4de0: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
4df0: 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  n");.      for(i
4e00: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4e10: 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  +){.        sqli
4e20: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
4e30: 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69  tdout, i, &aOp[i
4e40: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
4e50: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  }.    if( p->db-
4e60: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4e70: 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20  VdbeEQP ){.     
4e80: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4e90: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4ea0: 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63    if( aOp[i].opc
4eb0: 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
4ec0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
4ed0: 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22   once ) printf("
4ee0: 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a  VDBE Query Plan:
4ef0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
4f00: 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61  printf("%s\n", a
4f10: 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20  Op[i].p4.z);.   
4f20: 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b         once = 0;
4f30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4f40: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4f50: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4f60: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
4f70: 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45   )  printf("VDBE
4f80: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d   Trace:\n");.  }
4f90: 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  .  sqlite3EndBen
4fa0: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e  ignMalloc();.#en
4fb0: 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61  dif.  for(pOp=&a
4fc0: 4f 70 5b 70 2d 3e 70 63 5d 3b 20 72 63 3d 3d 53  Op[p->pc]; rc==S
4fd0: 51 4c 49 54 45 5f 4f 4b 3b 20 70 4f 70 2b 2b 29  QLITE_OK; pOp++)
4fe0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
4ff0: 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61  p>=aOp && pOp<&a
5000: 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66  Op[p->nOp]);.#if
5010: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
5020: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
5030: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
5040: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
5050: 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
5060: 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
5070: 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66 28  ANSTATUS.    if(
5080: 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e   p->anExec ) p->
5090: 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70  anExec[(int)(pOp
50a0: 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66  -aOp)]++;.#endif
50b0: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
50c0: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
50d0: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
50e0: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
50f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5100: 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
5110: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5120: 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
5130: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
5140: 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74  tOp(stdout, (int
5150: 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f  )(pOp - aOp), pO
5160: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
5170: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
5180: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
5190: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
51a0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
51b0: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
51c0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
51d0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
51e0: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
51f0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5200: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
5210: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5220: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
5230: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5240: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
5250: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5260: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
5270: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
5280: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
5290: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
52a0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
52b0: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67   Sanity checking
52c0: 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e   on other operan
52d0: 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ds */.#ifdef SQL
52e0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 61 73  ITE_DEBUG.    as
52f0: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
5300: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
5310: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5320: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
5330: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5340: 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20  & OPFLG_IN1)!=0 
5350: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5360: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
5370: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5380: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
5390: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
53a0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
53b0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
53c0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p1]) );.      a
53d0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
53e0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
53f0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5400: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p1]) );.      RE
5410: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5420: 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p1, &aMem[pOp-
5430: 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p1]);.    }.   
5440: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5450: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21  gs & OPFLG_IN2)!
5460: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5470: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5480: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5490: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
54a0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
54b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
54c0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
54d0: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
54e0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
54f0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5500: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5510: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5520: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5530: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
5540: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
5550: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5560: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
5570: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
5580: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5590: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
55a0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
55b0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
55c0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55d0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
55e0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
55f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5600: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5610: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5620: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5630: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5640: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
5650: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
5660: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5670: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5680: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
5690: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
56a0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
56b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
56c0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
56d0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
56e0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
56f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5700: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5710: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5720: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5730: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5740: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5750: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5760: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
5770: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5780: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5790: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
57a0: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  >p3]);.    }.#en
57b0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
57c0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
57d0: 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52   defined(VDBE_PR
57e0: 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67  OFILE).    pOrig
57f0: 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66  Op = pOp;.#endif
5800: 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20  .  .    switch( 
5810: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
5820: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
5830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5860: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
5870: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
5880: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
5890: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
58a0: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
58b0: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
58c0: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
58d0: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
58e0: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
58f0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
5900: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
5910: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
5920: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
5930: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
5940: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
5950: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
5960: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
5970: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
5980: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
5990: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
59a0: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
59b0: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
59c0: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
59d0: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
59e0: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
59f0: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
5a00: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
5a10: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
5a20: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
5a30: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
5a40: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
5a50: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
5a60: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
5a70: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
5a80: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
5a90: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
5aa0: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
5ab0: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
5ac0: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
5ad0: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
5ae0: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
5af0: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
5b00: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
5b10: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
5b20: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
5b30: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
5b40: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
5b50: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
5b60: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
5b70: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
5b80: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
5b90: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
5ba0: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
5bb0: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
5bc0: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
5bd0: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
5be0: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
5bf0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5c00: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
5c10: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
5c20: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
5c30: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
5c40: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
5c50: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
5c60: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
5c70: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
5c80: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
5c90: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
5ca0: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
5cb0: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
5cc0: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
5cd0: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
5ce0: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
5cf0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
5d00: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
5d10: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
5d20: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
5d30: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
5d40: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
5d50: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
5d60: 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a  2, out3.  See.**
5d70: 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61   the mkopcodeh.a
5d80: 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64  wk script for ad
5d90: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
5da0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75  tion..**.** Docu
5db0: 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20  mentation about 
5dc0: 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20  VDBE opcodes is 
5dd0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61  generated by sca
5de0: 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a  nning this file.
5df0: 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20  ** for lines of 
5e00: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70  that contain "Op
5e10: 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69  code:".  That li
5e20: 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  ne and all subse
5e30: 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  quent.** comment
5e40: 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20   lines are used 
5e50: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
5e60: 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  n of the opcode.
5e70: 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69  html documentati
5e80: 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  on.** file..**.*
5e90: 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a  * SUMMARY:.**.**
5ea0: 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20       Formatting 
5eb0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
5ec0: 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61  scripts that sca
5ed0: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
5ee0: 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61      Do not devia
5ef0: 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d  te from the form
5f00: 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72  atting style cur
5f10: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a  rently in use..*
5f20: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
5f30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
5f70: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
5f80: 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  to * P2 * * *.**
5f90: 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69  .** An unconditi
5fa0: 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64  onal jump to add
5fb0: 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ress P2..** The 
5fc0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
5fd0: 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62   executed will b
5fe0: 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74  e .** the one at
5ff0: 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74   index P2 from t
6000: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
6010: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  ** the program..
6020: 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72  **.** The P1 par
6030: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63  ameter is not ac
6040: 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74  tually used by t
6050: 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77  his opcode.  How
6060: 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73  ever, it.** is s
6070: 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20  ometimes set to 
6080: 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61  1 instead of 0 a
6090: 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
60a0: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
60b0: 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  ll.** that this 
60c0: 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74  Goto is the bott
60d0: 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64  om of a loop and
60e0: 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20   that the lines 
60f0: 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20  from P2 down.** 
6100: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  to the current l
6110: 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ine should be in
6120: 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41  dented for EXPLA
6130: 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  IN output..*/.ca
6140: 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20  se OP_Goto: {   
6150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
6160: 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f  p */.jump_to_p2_
6170: 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
6180: 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d  terrupt:.  pOp =
6190: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
61a0: 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65  1];..  /* Opcode
61b0: 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  s that are used 
61c0: 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66  as the bottom of
61d0: 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74   a loop (OP_Next
61e0: 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20  , OP_Prev,.  ** 
61f0: 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77  OP_VNext, OP_Row
6200: 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53  SetNext, or OP_S
6210: 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a  orterNext) all j
6220: 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20  ump here upon.  
6230: 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20  ** completion.  
6240: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
6250: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
6260: 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
6270: 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74  led.  ** or if t
6280: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6290: 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65  back needs to be
62a0: 20 69 6e 76 6f 6b 65 64 2e 20 41 6c 73 6f 20 63   invoked. Also c
62b0: 68 65 63 6b 20 66 6f 72 0a 20 20 2a 2a 20 4f 4f  heck for.  ** OO
62c0: 4d 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64  M conditions and
62d0: 20 61 62 6f 72 74 20 69 66 20 73 65 65 6e 2e 0a   abort if seen..
62e0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63    **.  ** This c
62f0: 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63  ode uses unstruc
6300: 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61  tured "goto" sta
6310: 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73  tements and does
6320: 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e   not look clean.
6330: 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69  .  ** But that i
6340: 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f  s not due to slo
6350: 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74  ppy coding habit
6360: 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77  s. The code is w
6370: 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a  ritten this.  **
6380: 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d   way for perform
6390: 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68  ance, to avoid h
63a0: 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65  aving to run the
63b0: 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70   interrupt and p
63c0: 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65  rogress.  ** che
63d0: 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63  cks on every opc
63e0: 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73  ode.  This helps
63f0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
6400: 74 6f 20 72 75 6e 20 6f 76 65 72 20 32 2e 30 25  to run over 2.0%
6410: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6420: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6430: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
6440: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
6450: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
6460: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
6470: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
6480: 6d 65 6d 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  mem;.  if( db->u
6490: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
64a0: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
64b0: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23  _to_interrupt;.#
64c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
64d0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
64e0: 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74  BACK.  /* Call t
64f0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6500: 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f  back if it is co
6510: 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65  nfigured and the
6520: 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72   required number
6530: 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70  .  ** of VDBE op
6540: 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  s have been exec
6550: 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e  uted (either sin
6560: 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69  ce this invocati
6570: 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74  on of.  ** sqlit
6580: 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20  e3VdbeExec() or 
6590: 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20  since last time 
65a0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
65b0: 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64  lback was called
65c0: 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70  )..  ** If the p
65d0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
65e0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
65f0: 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74  o, exit the virt
6600: 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68  ual machine with
6610: 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63  .  ** a return c
6620: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
6630: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
6640: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26  >xProgress!=0 &&
6650: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
6660: 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20  essLimit ){.    
6670: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f  assert( db->nPro
6680: 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20  gressOps!=0 );. 
6690: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
66a0: 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62  t = nVmStep + db
66b0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
66c0: 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50   (nVmStep%db->nP
66d0: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20  rogressOps);.   
66e0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
66f0: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
6700: 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63  Arg) ){.      rc
6710: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
6720: 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  UPT;.      goto 
6730: 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
6740: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
6750: 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  f.  .  break;.}.
6760: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73  ./* Opcode:  Gos
6770: 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ub P1 P2 * * *.*
6780: 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
6790: 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f  urrent address o
67a0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a  nto register P1.
67b0: 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70  ** and then jump
67c0: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
67d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62  */.case OP_Gosub
67e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
67f0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
6800: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
6810: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
6820: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
6830: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6840: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6850: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6860: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6870: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6880: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6890: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
68a0: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
68b0: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
68c0: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
68d0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
68e0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
68f0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6900: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6910: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6920: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6930: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6940: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6950: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6960: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6970: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6980: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6990: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
69a0: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
69b0: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
69c0: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
69d0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
69e0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
69f0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6a00: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6a10: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6a30: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6a40: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6a50: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6a60: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6a70: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6a80: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6a90: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6aa0: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6ab0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6ac0: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6ad0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6ae0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6af0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6b00: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6b10: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6b20: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6b30: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6b40: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6b50: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6b60: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6b70: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6b80: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6b90: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6ba0: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6bb0: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6bc0: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6bd0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6be0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6bf0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6c00: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6c10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6c20: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6c30: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
6c40: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
6c50: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
6c60: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
6c70: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6c80: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
6c90: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
6ca0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
6cb0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
6cc0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
6cd0: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
6ce0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
6cf0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
6d00: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
6d10: 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20   pOp->p2 ) goto 
6d20: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
6d30: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6d40: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
6d50: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6d60: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
6d70: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
6d80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
6d90: 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a  is a Yield..** J
6da0: 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70 61  ump to the P2 pa
6db0: 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20  rameter of that 
6dc0: 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20  Yield..** After 
6dd0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
6de0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
6df0: 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  defined..**.** S
6e00: 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72  ee also: InitCor
6e10: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
6e20: 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20  P_EndCoroutine: 
6e30: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
6e40: 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a  n1 */.  VdbeOp *
6e50: 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20  pCaller;.  pIn1 
6e60: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6e70: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6e80: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
6e90: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
6ea0: 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49  n1->u.i>=0 && pI
6eb0: 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29  n1->u.i<p->nOp )
6ec0: 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61  ;.  pCaller = &a
6ed0: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
6ee0: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
6ef0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65  ->opcode==OP_Yie
6f00: 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ld );.  assert( 
6f10: 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26  pCaller->p2>=0 &
6f20: 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d  & pCaller->p2<p-
6f30: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20  >nOp );.  pOp = 
6f40: 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32  &aOp[pCaller->p2
6f50: 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66   - 1];.  pIn1->f
6f60: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
6f70: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
6f80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
6f90: 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eld P1 P2 * * *.
6fa0: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
6fb0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
6fc0: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
6fd0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54   register P1.  T
6fe0: 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65  his.** has the e
6ff0: 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e  ffect of yieldin
7000: 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65  g to a coroutine
7010: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
7020: 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73  oroutine that is
7030: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
7040: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
7050: 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64  ds with.** Yield
7060: 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20   or Return then 
7070: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20  continue to the 
7080: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7090: 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65  .  But if.** the
70a0: 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63   coroutine launc
70b0: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
70c0: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
70d0: 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  h.** EndCoroutin
70e0: 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  e, then jump to 
70f0: 50 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  P2 rather than c
7100: 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74  ontinuing with t
7110: 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72  he.** next instr
7120: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
7130: 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f  e also: InitCoro
7140: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
7150: 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20  _Yield: {       
7160: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d       /* in1, jum
7170: 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73  p */.  int pcDes
7180: 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  t;.  pIn1 = &aMe
7190: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
71a0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
71b0: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
71c0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
71d0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
71e0: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
71f0: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
7200: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
7210: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
7220: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7230: 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  In1);.  pOp = &a
7240: 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72  Op[pcDest];.  br
7250: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7260: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7270: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7280: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
7290: 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a  r[P3]=null halt.
72a0: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
72b0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
72c0: 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20  r P3.  If it is 
72d0: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
72e0: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
72f0: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
7300: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
7310: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
7320: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
7330: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
7340: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
7350: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
7360: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
7370: 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
7380: 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e  ter should be 1.
7390: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
73a0: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
73b0: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
73c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
73d0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
73e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
73f0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
7400: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
7410: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
7420: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
7430: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
7440: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
7450: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7460: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7470: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7480: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7490: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
74a0: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
74b0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
74c0: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
74d0: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
74e0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
74f0: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
7500: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
7510: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
7520: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
7530: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
7540: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
7550: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7560: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7570: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7580: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7590: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
75a0: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
75b0: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
75c0: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
75d0: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
75e0: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
75f0: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
7600: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
7610: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
7620: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
7630: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
7640: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
7650: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7660: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7670: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7680: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7690: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
76a0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
76b0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
76c0: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
76d0: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
76e0: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
76f0: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
7700: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
7710: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
7720: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
7730: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
7740: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
7750: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
7760: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7770: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
7780: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7790: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
77a0: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
77b0: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
77c0: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
77d0: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
77e0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
77f0: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
7800: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
7810: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
7820: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
7830: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
7840: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
7850: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
7860: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
7870: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
7880: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
7890: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
78a0: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
78b0: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
78c0: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
78d0: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63  e OP_Halt: {.  c
78e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
78f0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
7900: 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56 64 62 65 46  zLogFmt;.  VdbeF
7910: 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
7920: 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20  int pcx;..  pcx 
7930: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
7940: 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  p);.  if( pOp->p
7950: 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  1==SQLITE_OK && 
7960: 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
7970: 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62   /* Halt the sub
7980: 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e  -program. Return
7990: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
79a0: 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f  parent frame. */
79b0: 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  .    pFrame = p-
79c0: 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e  >pFrame;.    p->
79d0: 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d  pFrame = pFrame-
79e0: 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d  >pParent;.    p-
79f0: 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73  >nFrame--;.    s
7a00: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
7a10: 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
7a20: 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20  nge);.    pcx = 
7a30: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
7a40: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
7a50: 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  .    lastRowid =
7a60: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
7a70: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
7a80: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7a90: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7aa0: 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50  on pcx is the OP
7ab0: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
7ac0: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
7ad0: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
7ae0: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
7af0: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
7b00: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
7b10: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
7b20: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
7b30: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
7b40: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
7b50: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
7b60: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
7b70: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
7b80: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
7b90: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
7ba0: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
7bb0: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
7bc0: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
7bd0: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
7be0: 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20   */.      pcx = 
7bf0: 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31  p->aOp[pcx].p2-1
7c00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
7c10: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
7c20: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
7c30: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78    pOp = &aOp[pcx
7c40: 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ];.    break;.  
7c50: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
7c60: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
7c70: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
7c80: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
7c90: 63 78 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20  cx;.  if( p->rc 
7ca0: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
7cb0: 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  p5 ){.      stat
7cc0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  ic const char * 
7cd0: 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d  const azType[] =
7ce0: 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22   { "NOT NULL", "
7cf0: 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22  UNIQUE", "CHECK"
7d00: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
7d30: 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a  FOREIGN KEY" };.
7d40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
7d50: 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d  p->p5>=1 && pOp-
7d60: 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20  >p5<=4 );.      
7d70: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7d80: 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  5==1 );.      te
7d90: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7da0: 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =2 );.      test
7db0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33  case( pOp->p5==3
7dc0: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7dd0: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29  se( pOp->p5==4 )
7de0: 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  ;.      zType = 
7df0: 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31  azType[pOp->p5-1
7e00: 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  ];.    }else{.  
7e10: 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20      zType = 0;. 
7e20: 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
7e30: 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70   zType!=0 || pOp
7e40: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20  ->p4.z!=0 );.   
7e50: 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72   zLogFmt = "abor
7e60: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
7e70: 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54   %s";.    if( zT
7e80: 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ype && pOp->p4.z
7e90: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7ea0: 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
7eb0: 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  s constraint fai
7ec0: 6c 65 64 3a 20 25 73 22 2c 20 7a 54 79 70 65 2c  led: %s", zType,
7ed0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
7ee0: 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
7ef0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71  p4.z ){.      sq
7f00: 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
7f10: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
7f20: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  z);.    }else{. 
7f30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7f40: 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e  Error(p, "%s con
7f50: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c  straint failed",
7f60: 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20   zType);.    }. 
7f70: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
7f80: 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c  Op->p1, zLogFmt,
7f90: 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70   pcx, p->zSql, p
7fa0: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
7fb0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
7fc0: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
7fd0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7fe0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
7ff0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
8000: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
8010: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
8020: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
8030: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
8040: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
8050: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8060: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
8070: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
8080: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
8090: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
80a0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
80b0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
80c0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
80d0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
80e0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
80f0: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
8100: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
8110: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8120: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8130: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
8140: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8150: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
8160: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
8170: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
8180: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
8190: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
81a0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
81b0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
81c0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
81d0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
81e0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
81f0: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8200: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8210: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8220: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8230: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8240: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8250: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
8260: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
8270: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
8280: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8290: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
82a0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
82b0: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
82c0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
82d0: 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
82e0: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
82f0: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
8300: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
8310: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
8320: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8330: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
8340: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
8350: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
8360: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8370: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
8380: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
8390: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
83a0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
83b0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
83c0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
83d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
83e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
83f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
8400: 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f  AT, out2 */.  pO
8410: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8420: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8430: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8440: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
8450: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
8460: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
8470: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20  ;.  pOut->u.r = 
8480: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
8490: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
84a0: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
84b0: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
84c0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
84d0: 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  [P2]='P4'.**.** 
84e0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
84f0: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
8500: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
8510: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
8520: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
8530: 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20  a String opcode 
8540: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
8550: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
8560: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
8570: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
8580: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
8590: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
85a0: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
85b0: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
85c0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
85d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
85e0: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
85f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8600: 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  ING, out2 */.  a
8610: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8620: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
8630: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8640: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f  , pOp);.  pOp->o
8650: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
8660: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
8670: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
8680: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
8690: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
86a0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
86b0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
86c0: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
86d0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
86e0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
86f0: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8700: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8710: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
8720: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8730: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8740: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8750: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
8760: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
8770: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
8780: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
8790: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
87a0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
87b0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
87c0: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
87d0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
87e0: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
87f0: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8800: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8810: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8820: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8830: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8840: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8850: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
8860: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
8870: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
8880: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
8890: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
88a0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
88b0: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
88c0: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
88d0: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
88e0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
88f0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8900: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8910: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8920: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8930: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8940: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8950: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
8960: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
8970: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
8980: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
8990: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
89a0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
89b0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
89c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
89d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
89e0: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
89f0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8a00: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
8a10: 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ero, then.** the
8a20: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8a30: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8a40: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8a50: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
8a60: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
8a70: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
8a80: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
8a90: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
8aa0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
8ab0: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8ac0: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8ad0: 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  AST..*/.case OP_
8ae0: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8af0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8b00: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8b10: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
8b20: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8b30: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
8b40: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
8b50: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8b60: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
8b70: 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70  = pOp->p4.z;.  p
8b80: 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31  Out->n = pOp->p1
8b90: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
8ba0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
8bb0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8bc0: 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  pOut);.#ifndef S
8bd0: 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e  QLITE_LIKE_DOESN
8be0: 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20  T_MATCH_BLOBS.  
8bf0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
8c00: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
8c10: 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p3>0 );.    asse
8c20: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8c30: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
8c40: 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20  ) );.    pIn3 = 
8c50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
8c60: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
8c70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
8c80: 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e  t );.    if( pIn
8c90: 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d 3e 66  3->u.i ) pOut->f
8ca0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c  lags = MEM_Blob|
8cb0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
8cc0: 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  erm;.  }.#endif.
8cd0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8ce0: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50  pcode: Null P1 P
8cf0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
8d00: 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33 5d  psis:  r[P2..P3]
8d10: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =NULL.**.** Writ
8d20: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
8d30: 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20  gisters P2.  If 
8d40: 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  P3 greater than 
8d50: 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72  P2, then also wr
8d60: 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f  ite.** NULL into
8d70: 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
8d80: 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20   every register 
8d90: 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e  in between P2 an
8da0: 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20  d P3.  If P3.** 
8db0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20  is less than P2 
8dc0: 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73  (typically P3 is
8dd0: 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79   zero) then only
8de0: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a   register P2 is.
8df0: 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  ** set to NULL..
8e00: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
8e10: 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
8e20: 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74  o, then also set
8e30: 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64   the MEM_Cleared
8e40: 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a   flag so that.**
8e50: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c   NULL values wil
8e60: 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71  l not compare eq
8e70: 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49  ual even if SQLI
8e80: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
8e90: 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20   on.** OP_Ne or 
8ea0: 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OP_Eq..*/.case O
8eb0: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
8ec0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
8ed0: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
8ee0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74  nullFlag;.  pOut
8ef0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8f00: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74  e(p, pOp);.  cnt
8f10: 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e   = pOp->p3-pOp->
8f20: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
8f30: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
8f40: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
8f50: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8f60: 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70  ullFlag = pOp->p
8f70: 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  1 ? (MEM_Null|ME
8f80: 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d  M_Cleared) : MEM
8f90: 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20  _Null;.  while( 
8fa0: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
8fb0: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
8fc0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
8fd0: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
8fe0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
8ff0: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
9000: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b  lags = nullFlag;
9010: 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a  .    cnt--;.  }.
9020: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9030: 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20  pcode: SoftNull 
9040: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  P1 * * * *.** Sy
9050: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e  nopsis:  r[P1]=N
9060: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65  ULL.**.** Set re
9070: 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76  gister P1 to hav
9080: 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  e the value NULL
9090: 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20   as seen by the 
90a0: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a  OP_MakeRecord.**
90b0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75   instruction, bu
90c0: 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e  t do not free an
90d0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
90e0: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
90f0: 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72  ed with.** the r
9100: 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74  egister, so that
9110: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61   if the value wa
9120: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
9130: 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70  ob that was.** p
9140: 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64  reviously copied
9150: 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c   using OP_SCopy,
9160: 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c   the copies will
9170: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
9180: 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  valid..*/.case O
9190: 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20  P_SoftNull: {.  
91a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
91b0: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
91c0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
91d0: 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  r) );.  pOut = &
91e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
91f0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28   pOut->flags = (
9200: 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f  pOut->flags|MEM_
9210: 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66  Null)&~MEM_Undef
9220: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
9230: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f  ../* Opcode: Blo
9240: 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  b P1 P2 * P4 *.*
9250: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9260: 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  ]=P4 (len=P1).**
9270: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
9280: 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20   a blob of data 
9290: 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20  P1 bytes long.  
92a0: 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c  Store this.** bl
92b0: 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
92c0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c  2..*/.case OP_Bl
92d0: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
92e0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
92f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9300: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
9310: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74  LENGTH );.  pOut
9320: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
9330: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c  e(p, pOp);.  sql
9340: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9350: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9360: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
9370: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
9380: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9390: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
93a0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
93b0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
93c0: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
93d0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
93e0: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
93f0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
9400: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
9410: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
9420: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
9430: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
9440: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
9450: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
9460: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
9470: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
9480: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
9490: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
94a0: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
94b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
94c0: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
94d0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
94e0: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
94f0: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
9500: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
9510: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9520: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
9530: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
9540: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
9550: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
9560: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
9570: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
9580: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
9590: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
95a0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
95b0: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
95c0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
95d0: 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  }.  pOut = out2P
95e0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
95f0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
9600: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
9610: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
9620: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
9630: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9640: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9650: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
9660: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9670: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
9680: 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a  @P3]=r[P1@P3].**
9690: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20  .** Move the P3 
96a0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
96b0: 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f  er P1..P1+P3-1 o
96c0: 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ver into.** regi
96d0: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d  sters P2..P2+P3-
96e0: 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31  1.  Registers P1
96f0: 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a  ..P1+P3-1 are.**
9700: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
9710: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
9720: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
9730: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
9740: 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e  .P1+P3-1 and P2.
9750: 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72  .P2+P3-1 to over
9760: 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65  lap.  It is an e
9770: 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74  rror.** for P3 t
9780: 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31  o be less than 1
9790: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
97a0: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20  e: {.  int n;   
97b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
97c0: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
97d0: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
97e0: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
97f0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9800: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
9810: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
9820: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
9830: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
9840: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
9850: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
9860: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
9870: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
9880: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
9890: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
98a0: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
98b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31   pIn1 = &aMem[p1
98c0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
98d0: 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  m[p2];.  do{.   
98e0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
98f0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
9900: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
9910: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
9920: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
9930: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9940: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
9950: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
9960: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
9970: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9980: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9990: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
99a0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
99b0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
99c0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
99d0: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
99e0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f  t->pScopyFrom<pO
99f0: 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ut ){.      pOut
9a00: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
9a10: 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20  pOp->p2 - p1;.  
9a20: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44    }.#endif.    D
9a30: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9a40: 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ut);.    REGISTE
9a50: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
9a60: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
9a70: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
9a80: 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20  while( --n );.  
9a90: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9aa0: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
9ab0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9ac0: 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72  is: r[P2@P3+1]=r
9ad0: 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20  [P1@P3+1].**.** 
9ae0: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
9af0: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9b00: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
9b10: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
9b20: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9b30: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
9b40: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
9b50: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
9b60: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
9b70: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
9b80: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
9b90: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
9ba0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
9bb0: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
9bc0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
9bd0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9be0: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9bf0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9c00: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
9c10: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
9c20: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
9c30: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9c40: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9c50: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
9c60: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
9c70: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
9c80: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
9c90: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
9ca0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
9cb0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
9cc0: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
9cd0: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
9ce0: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
9cf0: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
9d00: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
9d10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9d20: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
9d30: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9d40: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
9d50: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
9d60: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
9d70: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
9d80: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
9d90: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
9da0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
9db0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
9dc0: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
9dd0: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
9de0: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
9df0: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
9e00: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
9e10: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
9e20: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
9e30: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
9e40: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
9e50: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
9e60: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
9e70: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
9e80: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
9e90: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
9ea0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
9eb0: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
9ec0: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
9ed0: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
9ee0: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
9ef0: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
9f00: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
9f10: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
9f20: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
9f30: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
9f40: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9f50: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9f60: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
9f70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9f80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
9f90: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
9fa0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
9fb0: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
9fc0: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
9fd0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
9fe0: 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53  G.  if( pOut->pS
9ff0: 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f  copyFrom==0 ) pO
a000: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
a010: 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20   pIn1;.#endif.  
a020: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a030: 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20  ode: IntCopy P1 
a040: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
a050: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
a060: 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ].**.** Transfer
a070: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a080: 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ue held in regis
a090: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a0a0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a0b0: 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
a0c0: 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  zed version of S
a0d0: 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20  Copy that works 
a0e0: 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72  only for integer
a0f0: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63  .** values..*/.c
a100: 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20  ase OP_IntCopy: 
a110: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
a120: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
a130: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a140: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
a150: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a160: 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  t)!=0 );.  pOut 
a170: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a180: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
a190: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
a1a0: 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn1->u.i);.  b
a1b0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a1c0: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
a1d0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a1e0: 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72  opsis:  output=r
a1f0: 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P1@P2].**.** Th
a200: 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74  e registers P1 t
a210: 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63  hrough P1+P2-1 c
a220: 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
a230: 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74  row of.** result
a240: 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63  s. This opcode c
a250: 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65  auses the sqlite
a260: 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f  3_step() call to
a270: 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69   terminate.** wi
a280: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57  th an SQLITE_ROW
a290: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
a2a0: 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20   it sets up the 
a2b0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20  sqlite3_stmt.** 
a2c0: 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f  structure to pro
a2d0: 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74  vide access to t
a2e0: 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50  he r(P1)..r(P1+P
a2f0: 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a  2-1) values as.*
a300: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  * the result row
a310: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
a320: 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20  ultRow: {.  Mem 
a330: 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a  *pMem;.  int i;.
a340: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65    assert( p->nRe
a350: 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32  sColumn==pOp->p2
a360: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
a370: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
a380: 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70  ert( pOp->p1+pOp
a390: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
a3a0: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
a3b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a3c0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
a3d0: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20  LLBACK.  /* Run 
a3e0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75  the progress cou
a3f0: 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65  nter just before
a400: 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f   returning..  */
a410: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
a420: 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56  ress!=0.   && nV
a430: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
a440: 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e  Limit.   && db->
a450: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
a460: 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20  rogressArg)!=0. 
a470: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
a480: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
a490: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
a4a0: 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e  or_halt;.  }.#en
a4b0: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
a4c0: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
a4d0: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
a4e0: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
a4f0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
a500: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
a510: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
a520: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
a530: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
a540: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
a550: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
a560: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
a570: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
a580: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
a590: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
a5a0: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
a5b0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
a5c0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
a5d0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
a5e0: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
a5f0: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
a600: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
a610: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
a620: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
a630: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
a640: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
a650: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
a660: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
a670: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
a680: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a690: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
a6a0: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
a6b0: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
a6c0: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
a6d0: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
a6e0: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
a6f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
a700: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
a710: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
a720: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
a730: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
a740: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
a750: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
a760: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
a770: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
a780: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
a790: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
a7a0: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
a7b0: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
a7c0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
a7d0: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
a7e0: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
a7f0: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
a800: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
a810: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
a820: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
a830: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
a840: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
a850: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
a860: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
a870: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
a880: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
a890: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
a8a0: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
a8b0: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
a8c0: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
a8d0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
a8e0: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
a8f0: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
a900: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
a910: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
a920: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
a930: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
a940: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
a950: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
a960: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a970: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
a980: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
a990: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
a9a0: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
a9b0: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
a9c0: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
a9d0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
a9e0: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
a9f0: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
aa00: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
aa10: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
aa20: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
aa30: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
aa40: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
aa50: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
aa60: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
aa70: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
aa80: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
aa90: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
aaa0: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
aab0: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
aac0: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
aad0: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
aae0: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
aaf0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
ab00: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
ab10: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
ab20: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
ab30: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
ab40: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
ab50: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
ab60: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
ab70: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
ab80: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
ab90: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
aba0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
abb0: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
abc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
abd0: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
abe0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
abf0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
ac00: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
ac10: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
ac20: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
ac30: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f  oto no_mem;..  /
ac40: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
ac50: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
ac60: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
ac70: 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20  Op) + 1;.  rc = 
ac80: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
ac90: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
aca0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
acb0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
acc0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
acd0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
ace0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
acf0: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
ad00: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
ad10: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
ad20: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
ad30: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
ad40: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
ad50: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
ad60: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
ad70: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
ad80: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
ad90: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
ada0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
adb0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
adc0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
add0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
ade0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
adf0: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
ae00: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
ae10: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
ae20: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
ae30: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
ae40: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
ae50: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
ae60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ae70: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
ae80: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
ae90: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
aea0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
aeb0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
aec0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
aed0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
aee0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
aef0: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
af00: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
af10: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
af20: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
af30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
af40: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
af50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
af60: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
af70: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
af80: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
af90: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
afa0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
afb0: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
afc0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
afd0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
afe0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
aff0: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
b000: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
b010: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
b020: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
b030: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
b040: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
b050: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
b060: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
b070: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b080: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
b090: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b0a0: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
b0b0: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
b0c0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
b0d0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
b0e0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
b0f0: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
b100: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
b110: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
b120: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
b130: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
b140: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
b150: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
b160: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
b170: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
b180: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
b190: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
b1a0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
b1b0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
b1c0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
b1d0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b1e0: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
b1f0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
b200: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b210: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
b220: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b230: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b240: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b250: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b260: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b270: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b280: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b290: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
b2a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b2b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b2c0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
b2d0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
b2e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b2f0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b300: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b310: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b320: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b330: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b340: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b350: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b360: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b370: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
b380: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b390: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
b3a0: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
b3b0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
b3c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b3d0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
b3e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b3f0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b400: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b410: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b420: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b430: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b440: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b450: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
b460: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b470: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
b480: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
b490: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
b4a0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b4b0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
b4c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b4d0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b4e0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b4f0: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
b500: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
b510: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
b520: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
b530: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b540: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
b550: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
b560: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b570: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b580: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
b590: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b5a0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b5b0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b5c0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b5d0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b5e0: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b5f0: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b600: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b610: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b620: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b630: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b640: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b650: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b660: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b670: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b680: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b690: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b6a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b6b0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b6c0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b6d0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b6e0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b6f0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b700: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b710: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b720: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b730: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b740: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b750: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b760: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b770: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b780: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b790: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b7a0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b7b0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b7c0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b7d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b7e0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
b7f0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b800: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
b810: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
b820: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
b830: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
b840: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
b850: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
b860: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
b870: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
b880: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
b890: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
b8a0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b8b0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
b8c0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b8d0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b8e0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
b8f0: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b900: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b910: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b920: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
b930: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b940: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b950: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
b960: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
b970: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b980: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
b990: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b9a0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b9b0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
b9c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b9d0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
b9e0: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
b9f0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
ba00: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
ba10: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
ba20: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
ba30: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
ba40: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
ba50: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
ba60: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
ba70: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
ba80: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
ba90: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
baa0: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
bab0: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
bac0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
bad0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
bae0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
baf0: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
bb00: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
bb10: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
bb20: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
bb30: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
bb40: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
bb50: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
bb60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bb70: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
bb80: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
bb90: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
bba0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
bbb0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bbc0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
bbd0: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
bbe0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bbf0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bc00: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bc10: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
bc20: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
bc30: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bc40: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bc50: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
bc60: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
bc70: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
bc80: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
bc90: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
bca0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
bcb0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
bcc0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bcd0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bce0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bcf0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bd00: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
bd10: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
bd20: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
bd30: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
bd40: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bd50: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
bd60: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bd70: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
bd80: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
bd90: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
bda0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
bdb0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
bdc0: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
bdd0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
bde0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
bdf0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
be00: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
be10: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
be20: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
be30: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
be40: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
be50: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
be60: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
be70: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
be80: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
be90: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bea0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
beb0: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
bec0: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
bed0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
bee0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
bef0: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
bf00: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
bf10: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bf20: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
bf30: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
bf40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bf50: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
bf60: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
bf70: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
bf80: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
bf90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bfa0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bfb0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bfc0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bfd0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
bfe0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
bff0: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
c000: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
c010: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
c020: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
c030: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c040: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c050: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c060: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c070: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
c080: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
c090: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
c0a0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c0b0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c0c0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
c0d0: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
c0e0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c0f0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
c100: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
c110: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
c120: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
c130: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c140: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
c150: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
c160: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
c170: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
c180: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
c190: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c1a0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
c1b0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c1c0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
c1d0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
c1e0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
c1f0: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
c200: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
c210: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
c220: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
c230: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
c240: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
c250: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
c260: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
c270: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
c280: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
c290: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
c2a0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
c2b0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
c2c0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
c2d0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
c2e0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
c2f0: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
c300: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
c310: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
c320: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
c330: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
c340: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
c350: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
c360: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
c370: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
c380: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
c390: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
c3a0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
c3b0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
c3c0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
c3d0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
c3e0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
c3f0: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
c400: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
c410: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
c420: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
c430: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
c440: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
c450: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
c460: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
c470: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
c480: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
c490: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
c4a0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
c4b0: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
c4c0: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
c4d0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
c4e0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c4f0: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c500: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c510: 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20 50 31 20  e: Function0 P1 
c520: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
c530: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66  ynopsis: r[P3]=f
c540: 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  unc(r[P2@P5]).**
c550: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
c560: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
c570: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
c580: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 20   FuncDef object 
c590: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
c5a0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
c5b0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
c5c0: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
c5d0: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
c5e0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
c5f0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c600: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
c610: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c620: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
c630: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
c640: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
c650: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
c660: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
c670: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
c680: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
c690: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
c6a0: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
c6b0: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
c6c0: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
c6d0: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
c6e0: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
c6f0: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
c700: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
c710: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
c720: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
c730: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
c740: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
c750: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
c760: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
c770: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
c780: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
c790: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
c7a0: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
c7b0: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
c7c0: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
c7d0: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
c7e0: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
c7f0: 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67 53 74   Function, AggSt
c800: 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  ep, AggFinal.*/.
c810: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c820: 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
c830: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
c840: 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40  r[P3]=func(r[P2@
c850: 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  P5]).**.** Invok
c860: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
c870: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
c880: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
c890: 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
c8a0: 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  that.** contains
c8b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
c8c0: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  e function to be
c8d0: 20 72 75 6e 29 20 77 69 74 68 20 50 35 20 61 72   run) with P5 ar
c8e0: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a 2a 2a  guments taken.**
c8f0: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
c900: 32 20 61 6e 64 20 73 75 63 63 65 73 73 6f 72 73  2 and successors
c910: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c920: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c930: 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 72 65   stored.** in re
c940: 67 69 73 74 65 72 20 50 33 2e 20 20 52 65 67 69  gister P3.  Regi
c950: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
c960: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
c970: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
c980: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
c990: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
c9a0: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
c9b0: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
c9c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
c9d0: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
c9e0: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
c9f0: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
ca00: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
ca10: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
ca20: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
ca30: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
ca40: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
ca50: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
ca60: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
ca70: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
ca80: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
ca90: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
caa0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
cab0: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
cac0: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
cad0: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
cae0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
caf0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
cb00: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
cb10: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  SQL functions ar
cb20: 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65  e initially code
cb30: 64 20 61 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  d as OP_Function
cb40: 30 20 77 69 74 68 20 50 34 20 70 6f 69 6e 74 69  0 with P4 pointi
cb50: 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75 6e 63 44  ng.** to a FuncD
cb60: 65 66 20 6f 62 6a 65 63 74 2e 20 20 42 75 74 20  ef object.  But 
cb70: 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74  on first evaluat
cb80: 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70 65 72  ion, the P4 oper
cb90: 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f 6d 61  and is.** automa
cba0: 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65  tically converte
cbb0: 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65  d into an sqlite
cbc0: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
cbd0: 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61 74 69   and the operati
cbe0: 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20 74 6f  on.** changed to
cbf0: 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74 69 6f   this OP_Functio
cc00: 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20 74 68  n opcode.  In th
cc10: 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74  is way, the init
cc20: 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a 2a 2a  ialization of.**
cc30: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e   the sqlite3_con
cc40: 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63 63 75  text object occu
cc50: 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20 72 61  rs only once, ra
cc60: 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65 20 66  ther than once f
cc70: 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61 6c 75  or each.** evalu
cc80: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e  ation of the fun
cc90: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
cca0: 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 30   also: Function0
ccb0: 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46 69  , AggStep, AggFi
ccc0: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
ccd0: 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20 69 6e  unction0: {.  in
cce0: 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t n;.  sqlite3_c
ccf0: 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20  ontext *pCtx;.. 
cd00: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
cd10: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
cd20: 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   );.  n = pOp->p
cd30: 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  5;.  assert( pOp
cd40: 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
cd50: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
cd60: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
cd70: 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
cd80: 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
cd90: 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
cda0: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
cdb0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
cdc0: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
cdd0: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
cde0: 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
cdf0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
ce00: 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78  db, sizeof(*pCtx
ce10: 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66  ) + (n-1)*sizeof
ce20: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
ce30: 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  );.  if( pCtx==0
ce40: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
ce50: 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 30    pCtx->pOut = 0
ce60: 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20  ;.  pCtx->pFunc 
ce70: 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
ce80: 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28  .  pCtx->iOp = (
ce90: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
cea0: 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d  .  pCtx->pVdbe =
ceb0: 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63   p;.  pCtx->argc
cec0: 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74   = n;.  pOp->p4t
ced0: 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58  ype = P4_FUNCCTX
cee0: 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  ;.  pOp->p4.pCtx
cef0: 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e   = pCtx;.  pOp->
cf00: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75 6e 63  opcode = OP_Func
cf10: 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  tion;.  /* Fall 
cf20: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
cf30: 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a 63 61  Function */.}.ca
cf40: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
cf50: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  {.  int i;.  sql
cf60: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
cf70: 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  tx;..  assert( p
cf80: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
cf90: 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
cfa0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
cfb0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
cfc0: 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
cfd0: 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
cfe0: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
cff0: 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
d000: 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
d010: 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
d020: 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
d030: 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
d040: 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
d050: 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
d060: 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
d070: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
d080: 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
d090: 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
d0a0: 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
d0b0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
d0c0: 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
d0d0: 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  /.  pOut = &aMem
d0e0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
d0f0: 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d 20 70   pCtx->pOut != p
d100: 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Out ){.    pCtx-
d110: 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 20 20  >pOut = pOut;.  
d120: 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
d130: 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
d140: 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
d150: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
d160: 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41 62 6f  ];.  }..  memAbo
d170: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 43  utToChange(p, pC
d180: 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66 64 65  tx->pOut);.#ifde
d190: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
d1a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
d1b0: 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
d1c0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
d1d0: 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
d1e0: 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
d1f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
d200: 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
d210: 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
d220: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d230: 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d 45 4d  (pCtx->pOut, MEM
d240: 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e  _Null);.  pCtx->
d250: 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b  fErrorOrAux = 0;
d260: 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
d270: 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
d280: 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78  (*pCtx->pFunc->x
d290: 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70 43 74  SFunc)(pCtx, pCt
d2a0: 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e 61  x->argc, pCtx->a
d2b0: 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52 2d 32  rgv);/* IMP: R-2
d2c0: 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
d2d0: 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
d2e0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52  lastRowid;  /* R
d2f0: 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63 68  emember rowid ch
d300: 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78 53  anges made by xS
d310: 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  Func */..  /* If
d320: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
d330: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
d340: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
d350: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  ion */.  if( pCt
d360: 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29  x->fErrorOrAux )
d370: 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
d380: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20  isError ){.     
d390: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
d3a0: 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
d3b0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 43  e3_value_text(pC
d3c0: 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20  tx->pOut));.    
d3d0: 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45    rc = pCtx->isE
d3e0: 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
d3f0: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
d400: 65 41 75 78 44 61 74 61 28 70 2c 20 70 43 74 78  eAuxData(p, pCtx
d410: 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29 3b  ->iOp, pOp->p1);
d420: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  .  }..  /* Copy 
d430: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
d440: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20  e function into 
d450: 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20  register P3 */. 
d460: 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73   if( pOut->flags
d470: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
d480: 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71 6c  Blob) ){.    sql
d490: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
d4a0: 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e 70 4f 75  coding(pCtx->pOu
d4b0: 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
d4c0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
d4d0: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43 74 78 2d  eMemTooBig(pCtx-
d4e0: 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 74 6f  >pOut) ) goto to
d4f0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45  o_big;.  }..  RE
d500: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
d510: 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70 4f 75 74  ->p3, pCtx->pOut
d520: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
d530: 42 4c 4f 42 53 49 5a 45 28 70 43 74 78 2d 3e 70  BLOBSIZE(pCtx->p
d540: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
d550: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
d560: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
d570: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d580: 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d  [P3]=r[P1]&r[P2]
d590: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d5a0: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
d5b0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
d5c0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
d5d0: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
d5e0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
d5f0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
d600: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
d610: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
d620: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
d630: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
d640: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
d650: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
d660: 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]|r[P2].**.** 
d670: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
d680: 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  e OR of the valu
d690: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
d6a0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
d6b0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
d6c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
d6d0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
d6e0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
d6f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
d700: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
d710: 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50  hiftLeft P1 P2 P
d720: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
d730: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c  s:  r[P3]=r[P2]<
d740: 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  <r[P1].**.** Shi
d750: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
d760: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d770: 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20   P2 to the left 
d780: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
d790: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
d7a0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
d7b0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
d7c0: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
d7d0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
d7e0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
d7f0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
d800: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
d810: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
d820: 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50  de: ShiftRight P
d830: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
d840: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
d850: 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]>>r[P1].**.
d860: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
d870: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
d880: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
d890: 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a   right by the.**
d8a0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
d8b0: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
d8c0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
d8d0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
d8e0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
d8f0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
d900: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
d910: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
d920: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
d930: 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20  case OP_BitAnd: 
d940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d950: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
d960: 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  TAND, in1, in2, 
d970: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
d980: 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20  BitOr:          
d990: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d9a0: 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31  as TK_BITOR, in1
d9b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
d9c0: 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74  ase OP_ShiftLeft
d9d0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
d9e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48  * same as TK_LSH
d9f0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
da00: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
da10: 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20  hiftRight: {    
da20: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
da30: 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31  s TK_RSHIFT, in1
da40: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
da50: 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75   i64 iA;.  u64 u
da60: 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75  A;.  i64 iB;.  u
da70: 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  8 op;..  pIn1 = 
da80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
da90: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
daa0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
dab0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
dac0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
dad0: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
dae0: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
daf0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
db00: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
db10: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
db20: 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33  }.  iA = sqlite3
db30: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
db40: 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74  2);.  iB = sqlit
db50: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
db60: 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70  In1);.  op = pOp
db70: 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20  ->opcode;.  if( 
db80: 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b  op==OP_BitAnd ){
db90: 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20  .    iA &= iB;. 
dba0: 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f   }else if( op==O
dbb0: 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69  P_BitOr ){.    i
dbc0: 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A |= iB;.  }else
dbd0: 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20   if( iB!=0 ){.  
dbe0: 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50    assert( op==OP
dbf0: 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f  _ShiftRight || o
dc00: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
dc10: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68  );..    /* If sh
dc20: 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61  ifting by a nega
dc30: 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69  tive amount, shi
dc40: 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20  ft in the other 
dc50: 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  direction */.   
dc60: 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20   if( iB<0 ){.   
dc70: 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68     assert( OP_Sh
dc80: 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69  iftRight==OP_Shi
dc90: 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20  ftLeft+1 );.    
dca0: 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66    op = 2*OP_Shif
dcb0: 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a  tLeft + 1 - op;.
dcc0: 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d        iB = iB>(-
dcd0: 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a  64) ? -iB : 64;.
dce0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69      }..    if( i
dcf0: 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69  B>=64 ){.      i
dd00: 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70  A = (iA>=0 || op
dd10: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20  ==OP_ShiftLeft) 
dd20: 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65  ? 0 : -1;.    }e
dd30: 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70  lse{.      memcp
dd40: 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65  y(&uA, &iA, size
dd50: 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69  of(uA));.      i
dd60: 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  f( op==OP_ShiftL
dd70: 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75  eft ){.        u
dd80: 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20  A <<= iB;.      
dd90: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75  }else{.        u
dda0: 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20  A >>= iB;.      
ddb0: 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64    /* Sign-extend
ddc0: 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69 66   on a right shif
ddd0: 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20  t of a negative 
dde0: 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20  number */.      
ddf0: 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41 20    if( iA<0 ) uA 
de00: 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66 66  |= ((((u64)0xfff
de10: 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66  fffff)<<32)|0xff
de20: 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69  ffffff) << (64-i
de30: 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  B);.      }.    
de40: 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75    memcpy(&iA, &u
de50: 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a  A, sizeof(iA));.
de60: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74      }.  }.  pOut
de70: 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65  ->u.i = iA;.  Me
de80: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
de90: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
dea0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
deb0: 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50  de: AddImm  P1 P
dec0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
ded0: 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31  sis:  r[P1]=r[P1
dee0: 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20  ]+P2.** .** Add 
def0: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
df00: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
df10: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
df20: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
df30: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
df40: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
df50: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
df60: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
df70: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
df80: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
df90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
dfa0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
dfb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
dfc0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
dfd0: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c  (p, pIn1);.  sql
dfe0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
dff0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
e000: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
e010: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
e020: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
e030: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
e040: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
e050: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e060: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
e070: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
e080: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
e090: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
e0a0: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
e0b0: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
e0c0: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
e0d0: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
e0e0: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
e0f0: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
e100: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
e110: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
e120: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
e130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
e140: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
e150: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e160: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
e170: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
e180: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e190: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e1a0: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
e1b0: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
e1c0: 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
e1d0: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65  oding);.    Vdbe
e1e0: 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e  BranchTaken((pIn
e1f0: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
e200: 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  )==0, 2);.    if
e210: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
e220: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
e230: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
e240: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  2==0 ){.        
e250: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d  rc = SQLITE_MISM
e260: 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f  ATCH;.        go
e270: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
e280: 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c  error;.      }el
e290: 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  se{.        goto
e2a0: 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
e2b0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
e2c0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e2d0: 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pIn1, MEM_Int);.
e2e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
e2f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
e300: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
e310: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66  * Opcode: RealAf
e320: 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20  finity P1 * * * 
e330: 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73  *.**.** If regis
e340: 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20  ter P1 holds an 
e350: 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20  integer convert 
e360: 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c  it to a real val
e370: 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ue..**.** This o
e380: 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68  pcode is used wh
e390: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e  en extracting in
e3a0: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
e3b0: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20   column that.** 
e3c0: 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74  has REAL affinit
e3d0: 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20  y.  Such column 
e3e0: 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c  values may still
e3f0: 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a   be stored as.**
e400: 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73   integers, for s
e410: 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c  pace efficiency,
e420: 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61   but after extra
e430: 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68  ction we want th
e440: 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e  em.** to have on
e450: 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  ly a real value.
e460: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
e470: 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20  Affinity: {     
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e490: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e4a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e4b0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
e4c0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
e4d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
e4e0: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
e4f0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
e500: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
e510: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
e520: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20  /* Opcode: Cast 
e530: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
e540: 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
e550: 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46  y(r[P1]).**.** F
e560: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
e570: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
e580: 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65 66   be the type def
e590: 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a  ined by P2..** .
e5a0: 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76  ** <ul>.** <li v
e5b0: 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54 0a  alue="97"> TEXT.
e5c0: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 38  ** <li value="98
e5d0: 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76  "> BLOB.** <li v
e5e0: 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45 52  alue="99"> NUMER
e5f0: 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  IC.** <li value=
e600: 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a 2a  "100"> INTEGER.*
e610: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 31  * <li value="101
e620: 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e  "> REAL.** </ul>
e630: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
e640: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
e650: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
e660: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
e670: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
e680: 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Cast: {        
e690: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
e6a0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
e6b0: 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46  p->p2>=SQLITE_AF
e6c0: 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70  F_BLOB && pOp->p
e6d0: 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  2<=SQLITE_AFF_RE
e6e0: 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  AL );.  testcase
e6f0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e700: 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20  E_AFF_TEXT );.  
e710: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
e720: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2==SQLITE_AFF_BL
e730: 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  OB );.  testcase
e740: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e750: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
e760: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
e770: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
e780: 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65  _INTEGER );.  te
e790: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
e7a0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
e7b0: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
e7c0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
e7d0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
e7e0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d  p, pIn1);.  rc =
e7f0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
e800: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
e810: 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f  MemCast(pIn1, pO
e820: 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29  p->p2, encoding)
e830: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
e840: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
e850: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
e860: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
e870: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
e880: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
e890: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e8a0: 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33  s: if r[P1]<r[P3
e8b0: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
e8c0: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
e8d0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
e8e0: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
e8f0: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
e900: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
e910: 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a  dress P2.  .**.*
e920: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
e930: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
e940: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
e950: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
e960: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
e970: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
e980: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
e990: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e9a0: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
e9b0: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
e9c0: 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20  rough if either 
e9d0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
e9e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
e9f0: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
ea00: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
ea10: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
ea20: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
ea30: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
ea40: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
ea50: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
ea60: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
ea70: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
ea80: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
ea90: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
eaa0: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
eab0: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
eac0: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
ead0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
eae0: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
eaf0: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
eb00: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
eb10: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
eb20: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
eb30: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
eb40: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
eb50: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
eb60: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
eb70: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
eb80: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
eb90: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
eba0: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
ebb0: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
ebc0: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
ebd0: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
ebe0: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
ebf0: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
ec00: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
ec10: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
ec20: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
ec30: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
ec40: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
ec50: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
ec60: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
ec70: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
ec80: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
ec90: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
eca0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
ecb0: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
ecc0: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
ecd0: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
ece0: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
ecf0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
ed00: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
ed10: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
ed20: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
ed30: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
ed40: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
ed50: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
ed60: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
ed70: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
ed80: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
ed90: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
eda0: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
edb0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
edc0: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
edd0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
ede0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
edf0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
ee00: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
ee10: 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20  _STOREP2 bit of 
ee20: 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
ee30: 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e  do not jump.  In
ee40: 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20  stead,.** store 
ee50: 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74  a boolean result
ee60: 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31   (either 0, or 1
ee70: 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65  , or NULL) in re
ee80: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
ee90: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e   If the SQLITE_N
eea0: 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65 74  ULLEQ bit is set
eeb0: 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c   in P5, then NUL
eec0: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
eed0: 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c  sidered.** equal
eee0: 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c   to one another,
eef0: 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20 74   provided that t
ef00: 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  hey do not have 
ef10: 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65  their MEM_Cleare
ef20: 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f  d.** bit set..*/
ef30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
ef40: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ef50: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
ef60: 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]!=r[P3] goto 
ef70: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
ef80: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
ef90: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
efa0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
efb0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
efc0: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
efd0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
efe0: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
eff0: 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  l.  See the Lt o
f000: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
f010: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f020: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
f030: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
f040: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
f050: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
f060: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
f070: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
f080: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
f090: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
f0a0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f0b0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
f0c0: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
f0d0: 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65  parison is false
f0e0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
f0f0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f100: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f110: 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  true..** If neit
f120: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f130: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
f140: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
f150: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
f160: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
f170: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
f180: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
f190: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
f1a0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
f1b0: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
f1c0: 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]==r[P3] goto P
f1d0: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
f1e0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f1f0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
f200: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f210: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f220: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
f230: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f240: 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a  P3 are equal..**
f250: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f260: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f270: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f280: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
f290: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
f2a0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
f2b0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
f2c0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
f2d0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
f2e0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
f2f0: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
f300: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
f310: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f320: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
f330: 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65  n is true.  If e
f340: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
f350: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
f360: 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a  esult is false..
f370: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
f380: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
f390: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
f3a0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
f3b0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
f3c0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
f3d0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
f3e0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
f3f0: 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33  ode: Le P1 P2 P3
f400: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
f410: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b  is: if r[P1]<=r[
f420: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
f430: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
f440: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
f450: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
f460: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
f470: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
f480: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
f490: 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P3 is less than
f4a0: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
f4b0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
f4c0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
f4d0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
f4e0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
f4f0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
f500: 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50   Opcode: Gt P1 P
f510: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f520: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
f530: 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  >r[P3] goto P2.*
f540: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f550: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f560: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f570: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f580: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f590: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f5a0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
f5b0: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
f5c0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f5d0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f5e0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f5f0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f600: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
f610: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
f620: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f630: 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33  : if r[P1]>=r[P3
f640: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f650: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f660: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f670: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f680: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f690: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f6a0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f6b0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
f6c0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
f6d0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f6e0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f6f0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f700: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f710: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
f720: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
f730: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f740: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
f750: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
f760: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
f770: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f780: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
f790: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
f7a0: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
f7b0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f7c0: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
f7d0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
f7e0: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
f7f0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f800: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
f810: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
f820: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
f830: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
f840: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
f850: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
f860: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
f870: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
f880: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f890: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
f8a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
f8b0: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
f8c0: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
f8d0: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
f8e0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
f8f0: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
f900: 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
f910: 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
f920: 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
f930: 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
f940: 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
f950: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
f960: 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
f970: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
f980: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
f990: 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
f9a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f9b0: 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
f9c0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
f9d0: 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
f9e0: 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
f9f0: 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
fa00: 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
fa10: 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs3)&MEM_Null ){
fa20: 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62  .    /* One or b
fa30: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
fa40: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28   NULL */.    if(
fa50: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
fa60: 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20  E_NULLEQ ){.    
fa70: 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e    /* If SQLITE_N
fa80: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68  ULLEQ is set (wh
fa90: 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61  ich will only ha
faa0: 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  ppen if the oper
fab0: 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a  ator is.      **
fac0: 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29   OP_Eq or OP_Ne)
fad0: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
fae0: 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ump or not depen
faf0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
fb00: 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20        ** or not 
fb10: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
fb20: 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  e null..      */
fb30: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
fb40: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
fb50: 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  q || pOp->opcode
fb60: 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
fb70: 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31   assert( (flags1
fb80: 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d   & MEM_Cleared)=
fb90: 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
fba0: 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  rt( (pOp->p5 & S
fbb0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
fbc0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
fbd0: 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75  ( (flags1&MEM_Nu
fbe0: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
fbf0: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c   (flags3&MEM_Nul
fc00: 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
fc10: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
fc20: 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
fc30: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
fc40: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
fc50: 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  e equal */.     
fc60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fc70: 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73  res = 1;  /* Res
fc80: 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ults are not equ
fc90: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
fca0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
fcb0: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
fcc0: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
fcd0: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
fce0: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
fcf0: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
fd00: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
fd10: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
fd20: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fd30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
fd40: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
fd50: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
fd60: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
fd70: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
fd80: 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
fd90: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
fda0: 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
fdb0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
fdc0: 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  ut);.        Mem
fdd0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
fde0: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
fdf0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
fe00: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
fe10: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
fe20: 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61  .        VdbeBra
fe30: 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20  nchTaken(2,3);. 
fe40: 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e         if( pOp->
fe50: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
fe60: 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
fe70: 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
fe80: 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  _p2;.        }. 
fe90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
fea0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
feb0: 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65  e{.    /* Neithe
fec0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
fed0: 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69  L.  Do a compari
fee0: 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69  son. */.    affi
fef0: 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26  nity = pOp->p5 &
ff00: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
ff10: 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69  ;.    if( affini
ff20: 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty>=SQLITE_AFF_N
ff30: 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20  UMERIC ){.      
ff40: 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d  if( (flags1 & (M
ff50: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
ff60: 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
ff70: 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  tr ){.        ap
ff80: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
ff90: 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20  ty(pIn1,0);.    
ffa0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66    }.      if( (f
ffb0: 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74  lags3 & (MEM_Int
ffc0: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
ffd0: 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
ffe0: 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d          applyNum
fff0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
10000 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  3,0);.      }.  
10010 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
10020 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
10030 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69  _TEXT ){.      i
10040 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  f( (flags1 & MEM
10050 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
10060 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs1 & (MEM_Int|M
10070 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
10080 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10090 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
100a0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
100b0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
100c0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
100d0 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
100e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
100f0 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
10100 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
10110 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
10120 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags1&MEM_Dyn) !=
10130 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45   (pIn1->flags&ME
10140 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
10150 20 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31    flags1 = (pIn1
10160 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
10170 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
10180 73 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s1 & MEM_TypeMas
10190 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
101a0 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20    if( (flags3 & 
101b0 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
101c0 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e  flags3 & (MEM_In
101d0 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
101e0 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
101f0 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
10200 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
10210 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10220 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10230 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
10240 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10250 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20  Stringify(pIn3, 
10260 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
10270 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10280 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29  (flags3&MEM_Dyn)
10290 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73   != (pIn3->flags
102a0 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
102b0 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70       flags3 = (p
102c0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In3->flags & ~ME
102d0 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
102e0 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65  lags3 & MEM_Type
102f0 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mask);.      }. 
10300 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
10310 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
10320 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d  _COLLSEQ || pOp-
10330 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a  >p4.pColl==0 );.
10340 20 20 20 20 69 66 28 20 66 6c 61 67 73 31 20 26      if( flags1 &
10350 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
10360 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10370 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31  mExpandBlob(pIn1
10380 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 31 20  );.      flags1 
10390 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  &= ~MEM_Zero;.  
103a0 20 20 7d 0a 20 20 20 20 69 66 28 20 66 6c 61 67    }.    if( flag
103b0 73 33 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  s3 & MEM_Zero ){
103c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
103d0 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
103e0 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61  pIn3);.      fla
103f0 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f  gs3 &= ~MEM_Zero
10400 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 73 20  ;.    }.    res 
10410 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
10420 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
10430 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
10440 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f    }.  switch( pO
10450 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
10460 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
10470 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
10480 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10490 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
104a0 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
104b0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
104c0 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
104d0 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
104e0 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
104f0 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
10500 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10510 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
10520 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
10530 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
10540 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
10550 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
10560 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  eak;.  }..  /* U
10570 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
10580 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
10590 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
105a0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
105b0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
105c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
105d0 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
105e0 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
105f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
10600 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10610 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10620 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10630 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
10640 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
10650 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
10660 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10670 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
10680 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10690 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
106a0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
106b0 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
106c0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
106d0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
106e0 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
106f0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10700 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10710 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
10720 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
10730 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
10740 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
10750 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
10760 73 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  s ){.      goto 
10770 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
10780 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
10790 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
107a0 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
107b0 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
107c0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
107d0 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
107e0 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
107f0 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
10800 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
10810 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
10820 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
10830 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
10840 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
10850 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
10860 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10870 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
10880 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
10890 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
108a0 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
108b0 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
108c0 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
108d0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  e..**.** The fir
108e0 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68  st integer in th
108f0 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72  e P4 integer arr
10900 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68  ay is the length
10910 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   of the array.**
10920 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65   and does not be
10930 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65  come part of the
10940 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f   permutation..*/
10950 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
10960 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
10970 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
10980 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
10990 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
109a0 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
109b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 20 2b 20   = pOp->p4.ai + 
109c0 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
109d0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
109e0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
109f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10a00 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
10a10 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
10a20 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
10a30 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
10a40 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
10a50 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
10a60 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
10a70 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
10a80 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
10a90 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
10aa0 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
10ab0 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
10ac0 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
10ad0 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
10ae0 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
10af0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10b00 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
10b10 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
10b20 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
10b30 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
10b40 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
10b50 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
10b60 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
10b70 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
10b80 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
10b90 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
10ba0 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
10bb0 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
10bc0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
10bd0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
10be0 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
10bf0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
10c00 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
10c10 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
10c20 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
10c30 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
10c40 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
10c50 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
10c60 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
10c70 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
10c80 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
10c90 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
10ca0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
10cb0 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
10cc0 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
10cd0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
10ce0 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
10cf0 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
10d00 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
10d10 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
10d20 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
10d30 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
10d40 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
10d50 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
10d60 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
10d70 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
10d80 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
10d90 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
10da0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
10db0 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
10dc0 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
10dd0 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
10de0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
10df0 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
10e00 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
10e10 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
10e20 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
10e30 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
10e40 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
10e50 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
10e60 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
10e70 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
10e80 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
10e90 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
10ea0 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
10eb0 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
10ec0 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
10ed0 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
10ee0 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
10ef0 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
10f00 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
10f10 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
10f20 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
10f30 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
10f40 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
10f50 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
10f60 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
10f70 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
10f80 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10f90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
10fa0 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
10fb0 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  1+n<=(p->nMem-p-
10fc0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10fd0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
10fe0 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
10ff0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
11000 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
11010 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
11020 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
11030 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
11040 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
11050 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
11060 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11070 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
11080 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
11090 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
110a0 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
110b0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
110c0 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
110d0 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
110e0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
110f0 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
11100 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
11110 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
11120 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
11130 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
11140 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
11150 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
11160 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
11170 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
11180 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
11190 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
111a0 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
111b0 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
111c0 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
111d0 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
111e0 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
111f0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
11200 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
11210 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
11220 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
11230 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
11240 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
11250 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
11260 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
11270 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
11280 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
11290 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
112a0 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
112b0 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
112c0 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
112d0 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
112e0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
112f0 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
11300 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
11310 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
11320 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
11330 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
11340 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
11350 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
11360 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
11370 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
11380 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
11390 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
113a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
113b0 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
113c0 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
113d0 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
113e0 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
113f0 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
11400 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
11410 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11420 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
11430 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11440 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
11450 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
11460 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
11470 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
11480 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
11490 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
114a0 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
114b0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
114c0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
114d0 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
114e0 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
114f0 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
11500 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
11510 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
11520 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
11530 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
11540 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
11550 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
11560 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
11570 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11580 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
11590 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
115a0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
115b0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
115c0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
115d0 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
115e0 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
115f0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11600 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
11610 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
11620 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
11630 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
11640 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
11650 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
11660 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
11670 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
11680 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
11690 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
116a0 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
116b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
116c0 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
116d0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
116e0 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
116f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11700 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
11710 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
11720 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
11730 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
11740 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
11750 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
11760 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
11770 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
11780 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
11790 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
117a0 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
117b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
117c0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
117d0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
117e0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
117f0 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
11800 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
11810 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
11820 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
11830 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
11840 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
11850 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11860 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
11870 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
11880 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
11890 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
118a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
118b0 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
118c0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
118d0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
118e0 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
118f0 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
11900 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
11910 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
11920 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
11930 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11940 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
11950 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
11960 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
11970 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
11980 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
11990 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
119a0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
119b0 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
119c0 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
119d0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
119e0 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
119f0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11a00 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
11a10 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
11a20 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
11a30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11a40 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
11a50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11a60 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
11a70 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
11a80 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11a90 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
11aa0 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
11ab0 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
11ac0 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
11ad0 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
11ae0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11af0 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
11b00 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
11b10 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
11b20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
11b30 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11b40 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11b50 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
11b60 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11b70 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
11b80 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
11b90 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
11ba0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
11bb0 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
11bc0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11bd0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
11be0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
11bf0 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
11c00 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65  i = !sqlite3Vdbe
11c10 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
11c20 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11c30 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
11c40 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
11c50 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
11c60 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
11c70 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
11c80 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
11c90 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
11ca0 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
11cb0 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
11cc0 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
11cd0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
11ce0 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
11cf0 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
11d00 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
11d10 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
11d20 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
11d30 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11d40 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
11d50 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
11d60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11d70 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11d80 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
11d90 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
11da0 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
11db0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
11dc0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
11dd0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
11de0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
11df0 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
11e00 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
11e10 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
11e20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
11e30 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
11e40 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
11e50 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d 62  "once" flag numb
11e60 65 72 20 50 31 2e 20 49 66 20 69 74 20 69 73 20  er P1. If it is 
11e70 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  set, jump to ins
11e80 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a  truction P2. .**
11e90 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   Otherwise, set 
11ea0 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c  the flag and fal
11eb0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
11ec0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
11ed0 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  n..** In other w
11ee0 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63 6f 64  ords, this opcod
11ef0 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c  e causes all fol
11f00 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75  lowing opcodes u
11f10 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20  p through P2.** 
11f20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69  (but not includi
11f30 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75  ng P2) to run ju
11f40 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62  st once and to b
11f50 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62  e skipped on sub
11f60 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73  sequent.** times
11f70 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f   through the loo
11f80 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e  p..**.** All "on
11f90 63 65 22 20 66 6c 61 67 73 20 61 72 65 20 69 6e  ce" flags are in
11fa0 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65 64 20  itially cleared 
11fb0 77 68 65 6e 65 76 65 72 20 61 20 70 72 65 70 61  whenever a prepa
11fc0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
11fd0 20 66 69 72 73 74 20 62 65 67 69 6e 73 20 74 6f   first begins to
11fe0 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   run..*/.case OP
11ff0 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
12000 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
12010 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12020 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29  1<p->nOnceFlag )
12030 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
12040 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  ken(p->aOnceFlag
12050 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29  [pOp->p1]!=0, 2)
12060 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65  ;.  if( p->aOnce
12070 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b  Flag[pOp->p1] ){
12080 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
12090 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
120a0 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b     p->aOnceFlag[
120b0 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20  pOp->p1] = 1;.  
120c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
120d0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
120e0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
120f0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12100 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12110 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
12120 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
12130 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
12140 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
12150 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
12160 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
12170 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
12180 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12190 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
121a0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
121b0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
121c0 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
121d0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
121e0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
121f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12200 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
12210 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  ue.** is conside
12220 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20  red false if it 
12230 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61  has a numeric va
12240 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66  lue of zero.  If
12250 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
12260 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
12270 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
12280 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33  f and only if P3
12290 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
122a0 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
122c0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
122d0 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
122e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
122f0 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
12300 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
12310 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
12320 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
12330 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
12340 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
12350 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
12360 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
12370 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
12380 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12390 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
123a0 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
123b0 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
123c0 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
123d0 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
123e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
123f0 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
12400 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12410 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  (c!=0, 2);.  if(
12420 20 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a   c ){.    goto j
12430 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
12440 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12450 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
12460 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
12470 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d  psis:  if r[P1]=
12480 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
12490 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
124a0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
124b0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
124c0 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
124d0 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
124e0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
124f0 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
12500 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
12510 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12520 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12530 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
12540 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20  & MEM_Null)!=0, 
12550 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
12560 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12570 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)!=0 ){.    got
12580 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12590 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
125a0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
125b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
125c0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
125d0 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]!=NULL goto P2
125e0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
125f0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
12600 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12610 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
12620 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
12630 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
12640 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
12650 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
12660 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
12670 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62  [pOp->p1];.  Vdb
12680 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70  eBranchTaken( (p
12690 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
126a0 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20  _Null)==0, 2);. 
126b0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
126c0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
126d0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
126e0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
126f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12700 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
12710 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
12720 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58  opsis:  r[P3]=PX
12730 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
12740 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63   the data that c
12750 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
12760 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72  to as a structur
12770 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a  e built using.**
12780 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
12790 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53  instruction.  (S
127a0 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ee the MakeRecor
127b0 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  d opcode for add
127c0 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72  itional.** infor
127d0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
127e0 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64   format of the d
127f0 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74  ata.)  Extract t
12800 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a  he P2-th column.
12810 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63  ** from this rec
12820 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61  ord.  If there a
12830 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32  re less that (P2
12840 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69  +1) .** values i
12850 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78  n the record, ex
12860 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a  tract a NULL..**
12870 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78  .** The value ex
12880 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65  tracted is store
12890 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
128a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
128b0 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66  olumn contains f
128c0 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65  ewer than P2 fie
128d0 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63  lds, then extrac
128e0 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a  t a NULL.  Or,.*
128f0 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75  * if the P4 argu
12900 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d  ment is a P4_MEM
12910 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f   use the value o
12920 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
12930 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  t as.** the resu
12940 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  lt..**.** If the
12950 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43   OPFLAG_CLEARCAC
12960 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e  HE bit is set on
12970 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20   P5 and P1 is a 
12980 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
12990 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  sor,.** then the
129a0 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75   cache of the cu
129b0 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72  rsor is reset pr
129c0 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e  ior to extractin
129d0 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  g the column..**
129e0 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f   The first OP_Co
129f0 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70  lumn against a p
12a00 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65  seudo-table afte
12a10 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  r the value of t
12a20 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65  he content.** re
12a30 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67  gister has chang
12a40 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74  ed should have t
12a50 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  his bit set..**.
12a60 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
12a70 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
12a80 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
12a90 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20  bits are set on 
12aa0 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72  P5 when.** the r
12ab0 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74  esult is guarant
12ac0 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75  eed to only be u
12ad0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
12ae0 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28  ent of a length(
12af0 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29  ).** or typeof()
12b00 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65   function, respe
12b10 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f  ctively.  The lo
12b20 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62  ading of large b
12b30 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73  lobs can be.** s
12b40 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74  kipped for lengt
12b50 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74  h() and all cont
12b60 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20  ent loading can 
12b70 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74  be skipped for t
12b80 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65  ypeof()..*/.case
12b90 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20   OP_Column: {.  
12ba0 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  i64 payloadSize6
12bb0 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  4; /* Number of 
12bc0 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
12bd0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ord */.  int p2;
12be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
12bf0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
12c00 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
12c10 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
12c20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
12c30 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  sor */.  BtCurso
12c40 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
12c50 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
12c60 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
12c70 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
12c80 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
12c90 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
12ca0 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
12cb0 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
12cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
12cd0 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
12ce0 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
12cf0 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
12d00 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
12d10 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
12d20 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nter */.  Mem *p
12d30 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
12d40 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
12d50 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
12d60 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
12d70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
12d80 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
12d90 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
12da0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
12db0 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61   *zData;   /* Pa
12dc0 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
12dd0 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
12de0 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48  /.  const u8 *zH
12df0 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75  dr;    /* Next u
12e00 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20  nparsed byte of 
12e10 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
12e20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64  const u8 *zEndHd
12e30 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  r; /* Pointer to
12e40 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
12e50 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
12e60 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20    u32 offset;   
12e70 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
12e80 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  nto the data */.
12e90 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20    u64 offset64; 
12ea0 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f       /* 64-bit o
12eb0 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 61  ffset */.  u32 a
12ec0 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  vail;         /*
12ed0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12ee0 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61   of available da
12ef0 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20  ta */.  u32 t;  
12f00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
12f10 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74  type code from t
12f20 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
12f30 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b   */.  Mem *pReg;
12f40 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75           /* Pseu
12f50 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65  doTable input re
12f60 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20  gister */..  pC 
12f70 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
12f80 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  p1];.  p2 = pOp-
12f90 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  >p2;..  /* If th
12fa0 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20 69  e cursor cache i
12fb0 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69  s stale, bring i
12fc0 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a  t up-to-date */.
12fd0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
12fe0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26  beCursorMoveto(&
12ff0 70 43 2c 20 26 70 32 29 3b 0a 0a 20 20 61 73 73  pC, &p2);..  ass
13000 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
13010 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
13020 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
13030 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
13040 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
13050 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
13060 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73  p, pDest);.  ass
13070 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
13080 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
13090 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
130a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
130b0 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69  sert( p2<pC->nFi
130c0 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74  eld );.  aOffset
130d0 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a   = pC->aOffset;.
130e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
130f0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
13100 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74  VTAB );.  assert
13110 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
13120 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c  CURTYPE_PSEUDO |
13130 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
13140 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
13150 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
13160 5f 53 4f 52 54 45 52 20 29 3b 0a 20 20 70 43 72  _SORTER );.  pCr
13170 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
13180 73 6f 72 3b 0a 0a 20 20 69 66 28 20 72 63 20 29  sor;..  if( rc )
13190 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
131a0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
131b0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21  pC->cacheStatus!
131c0 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
131d0 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
131e0 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28  Row ){.      if(
131f0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
13200 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b  URTYPE_PSEUDO ){
13210 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13220 20 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61   pC->uc.pseudoTa
13230 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20  bleReg>0 );.    
13240 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d      pReg = &aMem
13250 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61  [pC->uc.pseudoTa
13260 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20  bleReg];.       
13270 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
13280 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
13290 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
132a0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
132b0 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  eg) );.        p
132c0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
132d0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
132e0 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20  il = pReg->n;.  
132f0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
13300 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20   (u8*)pReg->z;. 
13310 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13320 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13330 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
13340 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
13350 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
13360 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
13370 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
13380 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
13390 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
133a0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
133b0 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  r );.      if( p
133c0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
133d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
133e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
133f0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
13400 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
13410 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
13420 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
13430 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53  pCrsr, &payloadS
13440 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20  ize64);.        
13450 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
13460 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65  TE_OK ); /* True
13470 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
13480 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
13490 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20  above */.       
134a0 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   /* sqlite3Btree
134b0 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75  ParseCellPtr() u
134c0 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28  ses getVarint32(
134d0 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  ) to extract the
134e0 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c  .        ** payl
134f0 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20  oad size, so it 
13500 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
13510 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  r payloadSize64 
13520 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  to be.        **
13530 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20   larger than 32 
13540 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20  bits. */.       
13550 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61   assert( (payloa
13560 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45  dSize64 & SQLITE
13570 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29  _MAX_U32)==(u64)
13580 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b  payloadSize64 );
13590 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
135a0 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  w = sqlite3Btree
135b0 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20  KeyFetch(pCrsr, 
135c0 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20  &avail);.       
135d0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
135e0 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53   = (u32)payloadS
135f0 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c  ize64;.      }el
13600 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  se{.        asse
13610 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
13620 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
13630 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  rsr) );.        
13640 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
13650 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
13660 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e  ize(pCrsr, &pC->
13670 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20  payloadSize);.  
13680 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
13690 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
136a0 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
136b0 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
136c0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
136d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
136e0 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  aFetch(pCrsr, &a
136f0 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  vail);.      }. 
13700 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
13710 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  il<=65536 );  /*
13720 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
13730 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
13740 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
13750 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
13760 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
13770 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43    pC->szRow = pC
13780 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
13790 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
137a0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
137b0 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
137c0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
137d0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
137e0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
137f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13800 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
13810 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  avail;.      }. 
13820 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
13830 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
13840 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
13850 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
13860 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
13870 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20  w, offset);.    
13880 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
13890 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b   0;.    aOffset[
138a0 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20  0] = offset;... 
138b0 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
138c0 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  set ){.      /* 
138d0 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
138e0 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
138f0 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
13900 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
13910 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
13920 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
13930 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
13940 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
13950 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
13960 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
13970 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
13980 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
13990 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
139a0 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
139b0 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
139c0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
139d0 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
139e0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
139f0 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20  szRow = 0;..    
13a00 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
13a10 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
13a20 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
13a30 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
13a40 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20  eader..      ** 
13a50 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
13a60 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
13a70 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
13a80 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  on..      **.   
13a90 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69     ** Type entri
13aa0 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65  es can be betwee
13ab0 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20  n 1 and 5 bytes 
13ac0 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64  each.  But 4 and
13ad0 20 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a   5 byte.      **
13ae0 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75   types use so mu
13af0 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68  ch data space th
13b00 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  at there can onl
13b10 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32  y be 4096 and 32
13b20 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
13b30 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  m, respectively.
13b40 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d    So the maximum
13b50 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72   header length r
13b60 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20  esults from a.  
13b70 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
13b80 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
13b90 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
13ba0 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
13bb0 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20   three.      ** 
13bc0 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
13bd0 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
13be0 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
13bf0 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
13c00 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
13c10 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30  f( offset > 9830
13c20 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43  7 || offset > pC
13c30 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  ->payloadSize ){
13c40 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
13c50 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
13c60 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  T;.        goto 
13c70 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
13c80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
13c90 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
13ca0 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20  wing goto is an 
13cb0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49  optimization.  I
13cc0 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64  t can be omitted
13cd0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65 76 65 72   and.    ** ever
13ce0 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c  ything will stil
13cf0 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f  l work.  But OP_
13d00 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75 72  Column is measur
13d10 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20 20 20  ably faster.    
13d20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74  ** by skipping t
13d30 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f  he subsequent co
13d40 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68  nditional, which
13d50 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e   is always true.
13d60 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
13d70 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  rt( pC->nHdrPars
13d80 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20  ed<=p2 );       
13d90 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c    /* Conditional
13da0 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20   skipped */.    
13db0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  goto op_column_r
13dc0 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 7d 0a  ead_header;.  }.
13dd0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
13de0 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
13df0 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
13e00 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
13e10 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
13e20 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
13e30 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
13e40 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43  aOffset[] and pC
13e50 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a  ->aType[]..  */.
13e60 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
13e70 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
13e80 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d  /* If there is m
13e90 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c  ore header avail
13ea0 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67  able for parsing
13eb0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
13ec0 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78  try.    ** to ex
13ed0 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c  tract additional
13ee0 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75   fields up throu
13ef0 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66  gh the p2+1-th f
13f00 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ield .    */.   
13f10 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
13f20 68 65 61 64 65 72 3a 0a 20 20 20 20 69 66 28 20  header:.    if( 
13f30 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61  pC->iHdrOffset<a
13f40 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20  Offset[0] ){.   
13f50 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
13f60 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20  zData points to 
13f70 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65  enough of the re
13f80 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68  cord to cover th
13f90 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
13fa0 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
13fb0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65  =0 ){.        me
13fc0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
13fd0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
13fe0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
13ff0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
14000 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66  ee(pCrsr, 0, aOf
14010 66 73 65 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73  fset[0], !pC->is
14020 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20  Table, &sMem);. 
14030 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
14040 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
14050 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
14060 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
14070 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
14080 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14090 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
140a0 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  Row;.      }.  .
140b0 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e        /* Fill in
140c0 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e   pC->aType[i] an
140d0 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
140e0 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
140f0 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
14100 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
14110 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
14120 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73  offset64 = aOffs
14130 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64  et[i];.      zHd
14140 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e  r = zData + pC->
14150 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20  iHdrOffset;.    
14160 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74    zEndHdr = zDat
14170 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a  a + aOffset[0];.
14180 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 3c        assert( i<
14190 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
141a0 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b  Hdr );.      do{
141b0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 74 20  .        if( (t 
141c0 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20  = zHdr[0])<0x80 
141d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  ){.          zHd
141e0 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  r++;.          o
141f0 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
14200 65 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72  e3VdbeOneByteSer
14210 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
14220 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
14230 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20          zHdr += 
14240 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
14250 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20  32(zHdr, &t);.  
14260 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34          offset64
14270 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
14280 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b  erialTypeLen(t);
14290 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
142a0 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b     pC->aType[i++
142b0 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61  ] = t;.        a
142c0 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32  Offset[i] = (u32
142d0 29 28 6f 66 66 73 65 74 36 34 20 26 20 30 78 66  )(offset64 & 0xf
142e0 66 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20  fffffff);.      
142f0 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26  }while( i<=p2 &&
14300 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b   zHdr<zEndHdr );
14310 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
14320 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
14330 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
14340 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
14350 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
14360 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
14370 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
14380 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 0a  ease(&sMem);.  .
14390 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63        /* The rec
143a0 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69  ord is corrupt i
143b0 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  f any of the fol
143c0 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a  lowing are true:
143d0 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68  .      ** (1) th
143e0 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68  e bytes of the h
143f0 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73  eader extend pas
14400 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68  t the declared h
14410 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20  eader size.     
14420 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69   ** (2) the enti
14430 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73  re header was us
14440 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64  ed but not all d
14450 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20  ata was used.   
14460 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e     ** (3) the en
14470 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78  d of the data ex
14480 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65  tends beyond the
14490 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
144a0 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  rd..      */.   
144b0 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45     if( (zHdr>=zE
144c0 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a  ndHdr && (zHdr>z
144d0 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74  EndHdr || offset
144e0 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53  64!=pC->payloadS
144f0 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20  ize)).       || 
14500 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e  (offset64 > pC->
14510 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
14520 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63     ){.        rc
14530 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
14540 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
14550 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
14560 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
14570 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74    }else{.      t
14580 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = 0;.    }..   
14590 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79   /* If after try
145a0 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e  ing to extract n
145b0 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ew entries from 
145c0 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72  the header, nHdr
145d0 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a  Parsed is.    **
145e0 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f   still not up to
145f0 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20   p2, that means 
14600 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
14610 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70  has fewer than p
14620 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  2.    ** columns
14630 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74  .  So the result
14640 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
14650 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
14660 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  e or a NULL..   
14670 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
14680 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
14690 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
146a0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
146b0 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
146c0 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
146d0 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
146e0 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
146f0 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  atic);.      }el
14700 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
14710 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
14720 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
14730 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  }.      goto op_
14740 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
14750 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74  }.  }else{.    t
14760 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d   = pC->aType[p2]
14770 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72  ;.  }..  /* Extr
14780 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  act the content 
14790 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20  for the p2+1-th 
147a0 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c  column.  Control
147b0 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72   can only.  ** r
147c0 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20  each this point 
147d0 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  if aOffset[p2], 
147e0 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61  aOffset[p2+1], a
147f0 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d  nd pC->aType[p2]
14800 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61   are.  ** all va
14810 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  lid..  */.  asse
14820 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50  rt( p2<pC->nHdrP
14830 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72  arsed );.  asser
14840 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
14850 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
14860 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
14870 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73  mInvariants(pDes
14880 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65  t) );.  if( Vdbe
14890 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74  MemDynamic(pDest
148a0 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ) ) sqlite3VdbeM
148b0 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
148c0 3b 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70  ;.  assert( t==p
148d0 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a  C->aType[p2] );.
148e0 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
148f0 6e 63 6f 64 69 6e 67 3b 0a 20 20 69 66 28 20 70  ncoding;.  if( p
14900 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65  C->szRow>=aOffse
14910 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f  t[p2+1] ){.    /
14920 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f  * This is the co
14930 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20  mmon case where 
14940 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74  the desired cont
14950 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20  ent fits on the 
14960 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20  original.    ** 
14970 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65  page - where the
14980 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20   content is not 
14990 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70  on an overflow p
149a0 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61  age */.    zData
149b0 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f   = pC->aRow + aO
149c0 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69  ffset[p2];.    i
149d0 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20  f( t<12 ){.     
149e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
149f0 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20  alGet(zData, t, 
14a00 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
14a10 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  e{.      /* If t
14a20 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20  he column value 
14a30 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20  is a string, we 
14a40 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e  need a persisten
14a50 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20  t value, not.   
14a60 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65     ** a MEM_Ephe
14a70 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62  m value.  This b
14a80 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20  ranch is a fast 
14a90 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69  short-cut that i
14aa0 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20  s equivalent.   
14ab0 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67     ** to calling
14ac0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14ad0 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69  alGet() and sqli
14ae0 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72  te3VdbeDeephemer
14af0 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a  alize()..      *
14b00 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
14b10 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d  onst u16 aFlag[]
14b20 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d   = { MEM_Blob, M
14b30 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20  EM_Str|MEM_Term 
14b40 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  };.      pDest->
14b50 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29  n = len = (t-12)
14b60 2f 32 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44  /2;.      if( pD
14b70 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20  est->szMalloc < 
14b80 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20  len+2 ){.       
14b90 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
14ba0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
14bb0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
14bc0 65 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20  eMemGrow(pDest, 
14bd0 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f  len+2, 0) ) goto
14be0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d   no_mem;.      }
14bf0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44  else{.        pD
14c00 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e  est->z = pDest->
14c10 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d  zMalloc;.      }
14c20 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44  .      memcpy(pD
14c30 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
14c40 65 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  en);.      pDest
14c50 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20  ->z[len] = 0;.  
14c60 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e      pDest->z[len
14c70 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  +1] = 0;.      p
14c80 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46  Dest->flags = aF
14c90 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a  lag[t&1];.    }.
14ca0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
14cb0 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
14cc0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
14cd0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
14ce0 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
14cf0 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20    if( ((pOp->p5 
14d00 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  & (OPFLAG_LENGTH
14d10 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ARG|OPFLAG_TYPEO
14d20 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20  FARG))!=0.      
14d30 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
14d40 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
14d50 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
14d60 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29  _TYPEOFARG)!=0))
14d70 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20  .     || (len = 
14d80 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14d90 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a  lTypeLen(t))==0.
14da0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
14db0 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c  Content is irrel
14dc0 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20  evant for.      
14dd0 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70  **    1. the typ
14de0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a  eof() function,.
14df0 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74        **    2. t
14e00 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
14e10 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20  ction if X is a 
14e20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20  blob, and.      
14e30 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20  **    3. if the 
14e40 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
14e50 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a  s zero..      **
14e60 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
14e70 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63  well use bogus c
14e80 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
14e90 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20  an reading.     
14ea0 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d   ** content from
14eb0 20 64 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20 20   disk. */.      
14ec0 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b  static u8 aZero[
14ed0 38 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20  8];  /* This is 
14ee0 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e  the bogus conten
14ef0 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  t */.      sqlit
14f00 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
14f10 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29  aZero, t, pDest)
14f20 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
14f30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
14f40 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
14f50 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70  pCrsr, aOffset[p
14f60 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73  2], len, !pC->is
14f70 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20  Table,.         
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 20 20 20 20 20 20 20 20 20 20 70 44 65 73 74 29            pDest)
14fa0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
14fb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
14fc0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
14fd0 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74  SerialGet((const
14fe0 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74   u8*)pDest->z, t
14ff0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
15000 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
15010 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
15020 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
15030 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a  .op_column_out:.
15040 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a  op_column_error:
15050 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
15060 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
15070 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
15080 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
15090 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
150a0 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
150b0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
150c0 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
150d0 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
150e0 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
150f0 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
15100 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
15110 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
15120 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
15130 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
15140 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
15150 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
15160 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
15170 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
15180 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
15190 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
151a0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
151b0 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
151c0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
151d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
151e0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
151f0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
15200 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
15210 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
15220 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b   */.  char cAff;
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15240 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61  * A single chara
15250 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79  cter of affinity
15260 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
15270 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
15280 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
15290 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
152a0 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d  ( zAffinity[pOp-
152b0 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  >p2]==0 );.  pIn
152c0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
152d0 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41  1];.  while( (cA
152e0 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79  ff = *(zAffinity
152f0 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61  ++))!=0 ){.    a
15300 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26  ssert( pIn1 <= &
15310 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  p->aMem[(p->nMem
15320 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
15330 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15340 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15350 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15360 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
15370 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
15380 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
15390 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
153a0 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
153b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
153c0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
153d0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
153e0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
153f0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
15400 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
15410 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
15420 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
15430 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
15440 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
15450 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
15460 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
15470 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
15480 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
15490 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
154a0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
154b0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
154c0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
154d0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
154e0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
154f0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
15500 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15510 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15520 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15530 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
15540 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
15550 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
15560 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
15570 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
15580 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
15590 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
155a0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
155b0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
155c0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
155d0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
155e0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
155f0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
15600 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
15610 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
15620 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
15630 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
15640 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
15650 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
15660 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
15670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15680 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15690 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
156a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
156b0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
156c0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
156d0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
156e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
156f0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
15700 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
15710 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
15720 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
15730 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
15740 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
15750 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
15760 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15770 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15780 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15790 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
157a0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
157b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
157c0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
157d0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
157e0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
157f0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
15800 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
15810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
15820 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
15830 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
15840 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15850 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
15860 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
15870 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15880 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
15890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
158a0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
158b0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
158c0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
158d0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
158e0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
158f0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
15900 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
15910 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
15920 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
15930 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
15940 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
15950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
15960 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
15970 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
15980 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
15990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
159a0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
159b0 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
159c0 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
159e0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
159f0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
15a00 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
15a10 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
15a20 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
15a30 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
15a40 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
15a50 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
15a60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
15aa0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
15ab0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
15ac0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
15ad0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
15ae0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
15af0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
15b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
15b40 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
15b50 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
15b60 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
15b70 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
15b80 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
15b90 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
15ba0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
15bb0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
15bc0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
15bd0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
15be0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
15bf0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
15c00 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
15c10 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
15c20 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
15c30 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
15c40 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
15c50 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
15c60 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
15c70 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
15c80 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
15c90 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
15ca0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
15cb0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15cc0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
15cd0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
15ce0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15cf0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
15d00 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
15d10 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
15d20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
15d30 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
15d40 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
15d50 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
15d60 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
15d70 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
15d80 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
15d90 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
15da0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
15db0 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ield<=(p->nMem-p
15dc0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
15dd0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
15de0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
15df0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
15e00 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
15e10 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
15e20 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
15e30 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
15e40 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
15e50 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
15e60 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
15e70 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
15e80 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
15e90 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
15ea0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
15eb0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
15ec0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
15ed0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
15ee0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
15ef0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
15f00 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
15f10 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
15f20 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
15f30 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
15f40 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15f50 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
15f60 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
15f70 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
15f80 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
15f90 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
15fa0 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
15fb0 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
15fc0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
15fd0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20  ty[0] );.  }..  
15fe0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
15ff0 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
16000 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
16010 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
16020 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
16030 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
16040 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
16050 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
16060 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
16070 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
16080 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
16090 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d  ec) );.    pRec-
160a0 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
160b0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
160c0 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
160d0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
160e0 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
160f0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
16100 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
16110 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
16120 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
16130 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
16140 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f  (pRec) ) goto no
16150 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
16160 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f  e{.        nZero
16170 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
16180 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d  o;.        len -
16190 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
161a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
161b0 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
161c0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
161d0 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20  erial_type==127 
161e0 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
161f0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16200 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  8 );.    nHdr +=
16210 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32   serial_type<=12
16220 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56  7 ? 1 : sqlite3V
16230 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
16240 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28  type);.  }while(
16250 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74 61   (--pRec)>=pData
16260 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45  0 );..  /* EVIDE
16270 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d  NCE-OF: R-22564-
16280 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65 72  11647 The header
16290 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73   begins with a s
162a0 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a  ingle varint.  *
162b0 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e  * which determin
162c0 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  es the total num
162d0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
162e0 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65 20  the header. The 
162f0 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75  varint.  ** valu
16300 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  e is the size of
16310 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20 62   the header in b
16320 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74  ytes including t
16330 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20  he size varint. 
16340 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20   ** itself. */. 
16350 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
16360 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61  =126 );.  testca
16370 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b  se( nHdr==127 );
16380 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36  .  if( nHdr<=126
16390 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63   ){.    /* The c
163a0 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20  ommon case */.  
163b0 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d    nHdr += 1;.  }
163c0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72  else{.    /* Rar
163d0 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c  e case of a real
163e0 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20  ly large header 
163f0 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d  */.    nVarint =
16400 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16410 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64  n(nHdr);.    nHd
16420 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20  r += nVarint;.  
16430 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71    if( nVarint<sq
16440 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
16450 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20  Hdr) ) nHdr++;. 
16460 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64   }.  nByte = nHd
16470 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20 6e  r+nData;.  if( n
16480 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61  Byte+nZero>db->a
16490 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
164a0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
164b0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
164c0 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
164d0 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72  ure the output r
164e0 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75  egister has a bu
164f0 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67  ffer large enoug
16500 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a  h to store .  **
16510 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
16520 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
16530 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69  ster (pOp->p3) i
16540 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
16550 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20  .  ** be one of 
16560 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
16570 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ers (because the
16580 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
16590 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
165a0 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
165b0 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f  size() could clo
165c0 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
165d0 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
165e0 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  )..  */.  if( sq
165f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
16600 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c  rAndResize(pOut,
16610 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a   (int)nByte) ){.
16620 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
16630 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
16640 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
16650 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
16660 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
16670 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
16680 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
16690 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20  ;.  j = nHdr;.  
166a0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
166b0 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20  pLast );.  pRec 
166c0 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a  = pData0;.  do{.
166d0 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
166e0 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20  = pRec->uTemp;. 
166f0 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
16700 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32  F: R-06529-47362
16710 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73   Following the s
16720 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f  ize varint are o
16730 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a  ne or more.    *
16740 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  * additional var
16750 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f  ints, one per co
16760 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b  lumn. */.    i +
16770 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a  = putVarint32(&z
16780 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65  NewRecord[i], se
16790 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20  rial_type);     
167a0 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c         /* serial
167b0 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20   type */.    /* 
167c0 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
167d0 34 35 33 36 2d 35 31 37 32 38 20 54 68 65 20 76  4536-51728 The v
167e0 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63  alues for each c
167f0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63  olumn in the rec
16800 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64  ord.    ** immed
16810 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
16820 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
16830 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62   j += sqlite3Vdb
16840 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77  eSerialPut(&zNew
16850 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c  Record[j], pRec,
16860 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f   serial_type); /
16870 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d  * content */.  }
16880 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c  while( (++pRec)<
16890 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65  =pLast );.  asse
168a0 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20  rt( i==nHdr );. 
168b0 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74   assert( j==nByt
168c0 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  e );..  assert( 
168d0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
168e0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
168f0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
16900 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
16910 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
16920 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a  ags = MEM_Blob;.
16930 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20    if( nZero ){. 
16940 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f     pOut->u.nZero
16950 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
16960 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
16970 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75  _Zero;.  }.  pOu
16980 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
16990 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
169a0 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
169b0 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  er converted to 
169c0 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54  text */.  REGIST
169d0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
169e0 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
169f0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
16a00 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
16a10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
16a20 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
16a30 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
16a40 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
16a50 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
16a60 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
16a70 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
16a80 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
16a90 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
16aa0 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
16ab0 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
16ac0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
16ad0 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
16ae0 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
16af0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
16b00 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
16b10 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
16b20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  r;..  assert( p-
16b30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
16b40 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
16b50 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
16b60 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
16b70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72  Op->p1]->uc.pCur
16b80 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
16b90 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
16ba0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
16bb0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
16bc0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
16bd0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
16be0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
16bf0 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
16c00 79 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  y);.  pOut = out
16c10 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
16c20 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
16c30 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
16c40 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
16c50 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
16c60 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
16c70 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
16c80 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
16c90 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
16ca0 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
16cb0 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
16cc0 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
16cd0 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
16ce0 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
16cf0 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
16d00 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
16d10 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
16d20 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
16d30 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
16d40 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
16d50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
16d60 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
16d70 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
16da0 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
16db0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16dd0 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
16de0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
16df0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
16e00 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
16e10 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
16e20 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
16e30 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
16e40 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
16e50 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
16e60 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
16e70 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
16e80 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
16e90 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
16ea0 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
16eb0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
16ec0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
16ed0 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
16ee0 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
16ef0 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
16f00 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
16f10 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
16f20 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
16f30 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
16f40 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
16f50 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
16f60 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
16f70 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
16f80 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
16f90 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
16fa0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16fb0 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
16fc0 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
16fd0 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
16fe0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
16ff0 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
17000 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
17010 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
17020 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
17030 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
17040 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
17050 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
17060 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
17070 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
17080 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
17090 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
170a0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
170b0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
170c0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
170d0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
170e0 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
170f0 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
17100 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17110 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
17120 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17130 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17140 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    nName = sqlite
17150 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
17160 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
17170 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
17180 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  BLE.      /* Thi
17190 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
171a0 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
171b0 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
171c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
171d0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
171e0 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
171f0 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
17200 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
17210 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
17220 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
17230 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
17240 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
17250 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
17260 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
17270 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
17280 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
17290 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
172a0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
172b0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
172c0 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
172d0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
172e0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
172f0 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
17300 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IN,.            
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17320 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
17330 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  nt+db->nSavepoin
17340 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
17350 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
17360 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17370 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
17380 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
17390 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
173a0 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
173b0 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
173c0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
173d0 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
173e0 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
173f0 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
17400 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
17410 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
17420 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
17430 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
17440 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
17450 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
17460 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
17470 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
17480 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
17490 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
174a0 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
174b0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
174c0 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
174d0 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
174e0 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
174f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17500 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
17510 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
17520 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
17530 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
17540 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
17550 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
17560 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20   }.    .        
17570 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
17580 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
17590 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
175a0 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
175b0 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
175c0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
175d0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
175e0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
175f0 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
17600 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
17610 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
17620 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ns;.        pNew
17630 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
17640 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
17650 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
17660 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
17670 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
17680 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
17690 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
176a0 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
176b0 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
176c0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
176d0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
176e0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
176f0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
17700 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
17710 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
17720 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
17730 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
17740 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
17750 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
17760 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
17770 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
17780 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
17790 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
177a0 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
177b0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
177c0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
177d0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e  3VdbeError(p, "n
177e0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
177f0 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
17800 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17810 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
17820 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
17830 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
17840 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
17850 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
17860 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
17870 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
17880 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
17890 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
178a0 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
178b0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
178c0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
178d0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
178e0 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73  , "cannot releas
178f0 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  e savepoint - ".
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73            "SQL s
17920 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17930 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
17940 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17950 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
17960 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
17970 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
17980 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
17990 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
179a0 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
179b0 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
179c0 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
179d0 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
179e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
179f0 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
17a00 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
17a10 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
17a20 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
17a30 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
17a40 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
17a50 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
17a60 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
17a70 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
17a80 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
17a90 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
17aa0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
17ab0 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
17ac0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
17ad0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17ae0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
17af0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
17b00 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
17b10 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
17b20 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
17b30 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
17b40 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
17b50 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
17b60 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
17b70 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
17b80 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
17b90 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17ba0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
17bb0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17bc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
17bd0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17be0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
17bf0 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
17c00 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
17c10 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63          int isSc
17c20 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
17c30 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
17c40 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
17c50 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31  - iSavepoint - 1
17c60 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  ;.        if( p1
17c70 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
17c80 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
17c90 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
17ca0 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20   = (db->flags & 
17cb0 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
17cc0 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20  nges)!=0;.      
17cd0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
17ce0 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
17cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
17d00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72  = sqlite3BtreeTr
17d10 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
17d20 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20  >aDb[ii].pBt,.  
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52       SQLITE_ABOR
17d60 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20  T_ROLLBACK,.    
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
17da0 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e==0);.         
17db0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17dc0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17dd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17de0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
17df0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17e00 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
17e10 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nge = 0;.       
17e20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
17e30 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
17e40 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
17e50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17e60 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
17e70 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
17e80 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
17e90 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
17ea0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
17eb0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
17ec0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17ed0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
17ee0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17ef0 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68 61   if( isSchemaCha
17f00 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  nge ){.         
17f10 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
17f20 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
17f30 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17f40 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
17f50 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
17f60 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
17f70 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64    db->flags = (d
17f80 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54  b->flags | SQLIT
17f90 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
17fa0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17fb0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
17fc0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
17fd0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
17fe0 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42  RELEASE or ROLLB
17ff0 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c  ACK, destroy all
18000 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70   .      ** savep
18010 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73  oints nested ins
18020 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70  ide of the savep
18030 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
18040 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20  ted on. */.     
18050 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76   while( db->pSav
18060 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69  epoint!=pSavepoi
18070 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  nt ){.        pT
18080 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
18090 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
180a0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
180b0 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
180c0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
180d0 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
180e0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
180f0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
18100 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
18110 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
18120 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
18130 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
18140 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20  rated on .      
18150 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73  ** too. If it is
18160 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20   a ROLLBACK TO, 
18170 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d  then set the num
18180 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
18190 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72  .      ** constr
181a0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20  aint violations 
181b0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
181c0 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76  atabase to the v
181d0 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20  alue stored.    
181e0 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61    ** when the sa
181f0 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61  vepoint was crea
18200 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69  ted.  */.      i
18210 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
18220 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
18230 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
18240 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
18250 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
18260 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
18270 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
18280 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
18290 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
182a0 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
182b0 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
182c0 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
182d0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
182e0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
182f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
18300 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
18310 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
18320 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
18330 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  ons;.        db-
18340 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18350 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
18360 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
18370 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
18380 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
18390 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50  ion || p1==SAVEP
183a0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
183b0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
183c0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
183d0 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65  nt(db, p1, iSave
183e0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
183f0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18400 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
18410 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18420 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
18430 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18440 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
18450 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
18460 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
18470 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
18480 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
18490 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
184a0 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
184b0 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
184c0 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
184d0 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
184e0 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
184f0 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
18500 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
18510 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
18520 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
18530 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
18540 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
18550 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
18560 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
18570 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
18580 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
18590 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
185a0 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
185b0 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
185c0 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
185d0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
185e0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
185f0 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
18600 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
18610 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
18620 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
18630 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
18640 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
18650 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
18660 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
18670 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
18680 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
18690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
186a0 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20  ->nVdbeActive>0 
186b0 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
186c0 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
186d0 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72  ctive */.  asser
186e0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
186f0 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65  );..  if( desire
18700 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
18710 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
18720 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
18730 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
18740 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
18750 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
18760 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
18770 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42  ll(db, SQLITE_AB
18780 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20  ORT_ROLLBACK);. 
18790 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
187a0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
187b0 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
187c0 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e  toCommit && db->
187d0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
187e0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
187f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
18800 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
18810 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
18820 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20  re writing.     
18830 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
18840 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
18850 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
18860 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
18870 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f  first. .      */
18880 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
18890 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
188a0 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61  ot commit transa
188b0 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
188e0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
188f0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
18900 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18910 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73   break;.    }els
18920 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
18930 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
18940 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
18950 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
18960 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18970 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
18980 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
18990 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
189a0 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  mit;.    }.    i
189b0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
189c0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
189d0 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
189e0 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
189f0 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  aOp);.      db->
18a00 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
18a10 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
18a20 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d  ommit);.      p-
18a30 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
18a40 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
18a50 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18a60 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
18a70 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
18a80 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
18a90 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
18aa0 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
18ab0 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
18ac0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
18ad0 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
18ae0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
18af0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18b00 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
18b10 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
18b20 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
18b30 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
18b40 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
18b50 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
18b60 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
18b70 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
18b80 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
18b90 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
18ba0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
18bb0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
18bc0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
18bf0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
18c00 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
18c10 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
18c20 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
18c30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
18c40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
18c50 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
18c60 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
18c70 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
18c80 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
18c90 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
18ca0 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
18cb0 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
18cc0 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
18cd0 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
18ce0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18cf0 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
18d00 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
18d10 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
18d20 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
18d30 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
18d40 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
18d50 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
18d60 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
18d70 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
18d80 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
18d90 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
18da0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
18db0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
18dc0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
18dd0 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
18de0 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
18df0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
18e00 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
18e10 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
18e20 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
18e30 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
18e40 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
18e50 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
18e60 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
18e70 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
18e80 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
18e90 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
18ea0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
18eb0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
18ec0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
18ed0 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
18ee0 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
18ef0 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
18f00 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
18f10 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
18f20 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18f30 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
18f40 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
18f50 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
18f60 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
18f70 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
18f80 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
18f90 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
18fa0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
18fb0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
18fc0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
18fd0 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
18fe0 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
18ff0 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
19000 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
19010 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
19020 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
19030 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
19040 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
19050 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
19060 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
19070 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
19080 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
19090 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
190a0 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
190b0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
190c0 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
190d0 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
190e0 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
190f0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
19100 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
19110 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
19120 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
19130 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
19140 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
19150 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
19160 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
19170 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
19180 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
19190 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
191a0 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
191b0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
191c0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
191d0 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
191e0 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
191f0 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
19200 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
19210 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
19220 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
19230 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
19240 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
19250 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
19260 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
19270 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
19280 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
19290 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
192a0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
192b0 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
192c0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
192d0 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
192e0 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
192f0 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
19300 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
19310 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
19320 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
19330 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
19340 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
19350 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
19360 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
19370 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
19380 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
19390 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
193a0 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
193b0 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
193c0 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
193d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
193e0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
193f0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
19400 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
19410 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19420 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
19430 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
19440 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
19450 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
19460 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
19470 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
19480 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
19490 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
194a0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
194b0 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
194c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
194d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
194e0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
194f0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
19500 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
19510 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19520 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
19530 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
19540 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
19550 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
19560 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
19570 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
19580 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
19590 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
195a0 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
195b0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
195c0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
195d0 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
195e0 72 63 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  rc;.      goto v
195f0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
19600 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
19610 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19620 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19630 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
19640 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
19650 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
19660 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
19670 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
19680 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
19690 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
196a0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
196b0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
196c0 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
196d0 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
196e0 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
196f0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
19700 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
19710 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
19720 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
19730 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
19740 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
19750 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
19760 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
19770 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
19780 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19790 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
197a0 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
197b0 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
197c0 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
197d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
197e0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
197f0 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
19800 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
19810 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
19820 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
19830 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
19840 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
19850 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
19860 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
19870 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
19880 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
19890 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
198a0 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
198b0 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
198c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
198d0 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
198e0 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
198f0 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
19900 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
19910 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
19920 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
19930 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
19940 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
19950 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
19960 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
19970 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
19980 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
19990 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
199a0 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32  NTATION-OF: R-32
199b0 31 39 35 2d 31 39 34 36 35 20 54 68 65 20 73 63  195-19465 The sc
199c0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
199d0 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20  used by SQLite. 
199e0 20 20 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20     ** each time 
199f0 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
19a00 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
19a10 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
19a20 63 61 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20  cache of the.   
19a30 20 2a 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20   ** schema used 
19a40 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
19a50 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
19a60 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
19a70 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61  of the.    ** da
19a80 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
19a90 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
19aa0 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
19ab0 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
19ac0 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
19ad0 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
19ae0 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
19af0 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
19b00 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
19b10 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
19b20 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
19b30 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
19b40 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
19b50 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
19b60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
19b70 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
19b80 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
19b90 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
19ba0 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
19bb0 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
19bc0 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
19bd0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
19be0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
19bf0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
19c00 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
19c10 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
19c20 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
19c30 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
19c40 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
19c50 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19c60 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
19c70 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
19c80 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
19c90 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
19ca0 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
19cb0 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
19cc0 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
19cd0 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
19ce0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
19cf0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
19d00 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
19d10 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
19d20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
19d30 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
19d40 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
19d50 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
19d60 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
19d70 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
19d80 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
19d90 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
19da0 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
19db0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
19dc0 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
19dd0 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
19de0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
19df0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
19e00 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
19e10 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
19e20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
19e30 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
19e40 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
19e50 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
19e60 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
19e70 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
19e80 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
19e90 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
19ea0 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
19eb0 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
19ec0 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
19ed0 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
19ee0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
19ef0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
19f00 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
19f10 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
19f20 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
19f30 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
19f40 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
19f50 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
19f60 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
19f70 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
19f80 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
19f90 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
19fa0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19fb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
19fc0 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
19fd0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
19fe0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
19ff0 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
1a000 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1a010 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1a020 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1a030 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1a040 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1a050 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1a060 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1a070 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1a080 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1a090 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1a0a0 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1a0b0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1a0c0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1a0d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1a0e0 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1a0f0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1a100 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1a110 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1a120 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1a130 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1a140 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1a150 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1a160 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1a170 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1a180 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1a190 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a1a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1a1b0 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1a1c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1a1d0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1a1e0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1a1f0 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1a200 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a210 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1a220 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1a230 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1a240 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1a250 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1a260 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1a270 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1a280 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1a290 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1a2a0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1a2b0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1a2c0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1a2d0 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1a2e0 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1a2f0 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1a300 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1a310 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1a320 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1a330 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1a340 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1a350 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a360 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1a370 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1a380 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65  Write the intege
1a390 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20  r value P3 into 
1a3a0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
1a3b0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
1a3c0 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65  .** P2==1 is the
1a3d0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1a3e0 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64    P2==2 is the d
1a3f0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1a400 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  ** P2==3 is the 
1a410 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1a420 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
1a430 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1a440 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
1a450 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1a460 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1a470 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
1a480 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
1a490 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1a4a0 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
1a4b0 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
1a4c0 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
1a4d0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
1a4e0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
1a4f0 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  _SetCookie: {.  
1a500 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
1a510 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
1a520 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1a530 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a540 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1a550 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1a560 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1a570 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1a580 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
1a590 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1a5a0 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
1a5b0 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
1a5c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
1a5d0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
1a5e0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1a5f0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1a600 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
1a610 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
1a620 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
1a630 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
1a640 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
1a650 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
1a660 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
1a670 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29  Op->p2, pOp->p3)
1a680 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1a690 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1a6a0 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1a6b0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1a6c0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1a6d0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1a6e0 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1a6f0 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1a700 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1a710 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1a720 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
1a730 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
1a740 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66  nges;.  }else if
1a750 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1a760 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
1a770 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
1a780 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
1a790 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
1a7a0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1a7b0 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d  le_format = pOp-
1a7c0 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  >p3;.  }.  if( p
1a7d0 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
1a7e0 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
1a7f0 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
1a800 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
1a810 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
1a820 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
1a830 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
1a840 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
1a850 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
1a860 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
1a870 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
1a880 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
1a890 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1a8a0 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
1a8b0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1a8c0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1a8d0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1a8e0 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
1a8f0 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
1a900 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
1a910 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
1a920 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
1a930 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
1a940 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1a950 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
1a960 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
1a970 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
1a980 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
1a990 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
1a9a0 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
1a9b0 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
1a9c0 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
1a9d0 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
1a9e0 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
1a9f0 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
1aa00 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
1aa10 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
1aa20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
1aa30 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
1aa40 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
1aa50 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
1aa60 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
1aa70 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
1aa80 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
1aa90 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
1aaa0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
1aab0 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f   then use the co
1aac0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1aad0 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74  r P2 as the root
1aae0 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68   page, not.** th
1aaf0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
1ab00 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  self..**.** Ther
1ab10 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64  e will be a read
1ab20 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74   lock on the dat
1ab30 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74  abase whenever t
1ab40 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70  here is an.** op
1ab50 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74  en cursor.  If t
1ab60 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20  he database was 
1ab70 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74  unlocked prior t
1ab80 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  o this instructi
1ab90 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61  on.** then a rea
1aba0 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  d lock is acquir
1abb0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1abc0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1abd0 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20   A read.** lock 
1abe0 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f  allows other pro
1abf0 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74  cesses to read t
1ac00 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20  he database but 
1ac10 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79  prohibits.** any
1ac20 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66   other process f
1ac30 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  rom modifying th
1ac40 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
1ac50 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a   read lock is.**
1ac60 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61   released when a
1ac70 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63  ll cursors are c
1ac80 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20  losed.  If this 
1ac90 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65  instruction atte
1aca0 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61  mpts.** to get a
1acb0 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66   read lock but f
1acc0 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74  ails, the script
1acd0 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68   terminates with
1ace0 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55   an.** SQLITE_BU
1acf0 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  SY error code..*
1ad00 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1ad10 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1ad20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1ad30 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1ad40 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1ad50 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1ad60 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1ad70 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1ad80 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1ad90 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1ada0 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1adb0 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1adc0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1add0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1ade0 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1adf0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1ae00 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1ae10 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1ae20 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1ae30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1ae40 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1ae50 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1ae60 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65  o: OpenWrite, Re
1ae70 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70  openIdx.*/./* Op
1ae80 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20  code: ReopenIdx 
1ae90 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1aea0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1aeb0 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1aec0 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f   The ReopenIdx o
1aed0 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63  pcode works exac
1aee0 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65  tly like ReadOpe
1aef0 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  n except that it
1af00 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73   first.** checks
1af10 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63   to see if the c
1af20 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61  ursor on P1 is a
1af30 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68  lready open with
1af40 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20   a root page.** 
1af50 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64  number of P2 and
1af60 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20 6f   if it is this o
1af70 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20  pcode becomes a 
1af80 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72  no-op.  In other
1af90 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68   words,.** if th
1afa0 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65  e cursor is alre
1afb0 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74  ady open, do not
1afc0 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a   reopen it..**.*
1afd0 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1afe0 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20  opcode may only 
1aff0 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35 3d  be used with P5=
1b000 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20 62  =0 and with P4 b
1b010 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59  eing.** a P4_KEY
1b020 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75  INFO object.  Fu
1b030 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50  rthermore, the P
1b040 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1b050 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65  the same as.** e
1b060 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65  very other Reope
1b070 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64  nIdx or OpenRead
1b080 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75   for the same cu
1b090 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a  rsor number..**.
1b0a0 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52  ** See the OpenR
1b0b0 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d  ead opcode docum
1b0c0 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64  entation for add
1b0d0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
1b0e0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
1b0f0 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
1b100 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1b110 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1b120 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
1b130 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
1b140 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
1b150 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
1b160 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1b170 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
1b180 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
1b190 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1b1a0 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
1b1b0 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
1b1c0 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
1b1d0 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
1b1e0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
1b1f0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
1b200 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
1b210 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1b220 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
1b230 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
1b240 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
1b250 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
1b260 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
1b270 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
1b280 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
1b290 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
1b2a0 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
1b2b0 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
1b2c0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1b2d0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1b2e0 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
1b2f0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
1b300 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1b310 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
1b320 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
1b330 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
1b340 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
1b350 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
1b360 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
1b370 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
1b380 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
1b390 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
1b3a0 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
1b3b0 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
1b3c0 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
1b3d0 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
1b3e0 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
1b3f0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
1b400 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
1b410 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
1b420 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
1b430 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
1b440 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
1b450 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
1b460 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69  ReopenIdx: {.  i
1b470 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
1b480 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1b490 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
1b4a0 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
1b4b0 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
1b4c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1b4d0 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
1b4e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b4f0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1b500 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1b510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b520 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1b530 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  NFO );.  pCur = 
1b540 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1b550 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26  ];.  if( pCur &&
1b560 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d   pCur->pgnoRoot=
1b570 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b  =(u32)pOp->p2 ){
1b580 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 75  .    assert( pCu
1b590 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20  r->iDb==pOp->p3 
1b5a0 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61  );      /* Guara
1b5b0 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f 64  nteed by the cod
1b5c0 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1b5d0 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72     goto open_cur
1b5e0 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20  sor_set_hints;. 
1b5f0 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63   }.  /* If the c
1b600 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72  ursor is not cur
1b610 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69  rently open or i
1b620 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66  s open on a diff
1b630 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78  erent.  ** index
1b640 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1b650 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e  ugh into OP_Open
1b660 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20  Read to force a 
1b670 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f  reopen */.case O
1b680 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
1b690 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a   OP_OpenWrite:..
1b6a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1b6b0 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1b6c0 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ite || pOp->p5==
1b6d0 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50  0 || pOp->p5==OP
1b6e0 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20  FLAG_SEEKEQ );. 
1b6f0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1b700 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
1b710 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1b720 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70  OP_OpenRead || p
1b730 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1b740 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20  eopenIdx.       
1b750 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c     || p->readOnl
1b760 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  y==0 );..  if( p
1b770 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
1b780 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1b790 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20  RT_ROLLBACK;.   
1b7a0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e   break;.  }..  n
1b7b0 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
1b7c0 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
1b7d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
1b7e0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1b7f0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1b800 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
1b810 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1b820 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1b830 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20  , iDb) );.  pDb 
1b840 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
1b850 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
1b860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
1b870 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1b880 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1b890 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65  rite ){.    asse
1b8a0 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  rt( OPFLAG_FORDE
1b8b0 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44  LETE==BTREE_FORD
1b8c0 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46  ELETE );.    wrF
1b8d0 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53  lag = BTREE_WRCS
1b8e0 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  R | (pOp->p5 & O
1b8f0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
1b900 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
1b910 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1b920 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
1b930 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d   );.    if( pDb-
1b940 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1b950 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72  ormat < p->minWr
1b960 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b  iteFileFormat ){
1b970 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69  .      p->minWri
1b980 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70  teFileFormat = p
1b990 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1b9a0 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a  e_format;.    }.
1b9b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46    }else{.    wrF
1b9c0 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  lag = 0;.  }.  i
1b9d0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1b9e0 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20  LAG_P2ISREG ){. 
1b9f0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
1ba00 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1ba10 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
1ba20 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70  Cursor) );.    p
1ba30 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
1ba40 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
1ba50 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b  IsValid(pIn2) );
1ba60 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49  .    assert( (pI
1ba70 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
1ba80 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73  Int)!=0 );.    s
1ba90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1baa0 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
1bab0 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
1bac0 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
1bad0 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
1bae0 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
1baf0 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54  prior OP_CreateT
1bb00 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  able opcode and.
1bb10 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
1bb20 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
1bb30 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
1bb40 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
1bb50 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
1bb60 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
1bb70 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
1bb80 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1bb90 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
1bba0 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
1bbb0 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
1bbc0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
1bbd0 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32      if( NEVER(p2
1bbe0 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63  <2) ) {.      rc
1bbf0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
1bc00 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
1bc10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1bc20 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
1bc30 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
1bc40 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1bc50 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
1bc60 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1bc70 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o;.    assert( p
1bc80 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1bc90 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73  C(db) );.    ass
1bca0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1bcb0 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69  b==db );.    nFi
1bcc0 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  eld = pKeyInfo->
1bcd0 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d  nField+pKeyInfo-
1bce0 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  >nXField;.  }els
1bcf0 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
1bd00 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
1bd10 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1bd20 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
1bd30 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1bd40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  );.  assert( nFi
1bd50 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74  eld>=0 );.  test
1bd60 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20  case( nField==0 
1bd70 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74  );  /* Table wit
1bd80 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
1bd90 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e  Y KEY and nothin
1bda0 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72  g else */.  pCur
1bdb0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1bdc0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1bdd0 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59  ield, iDb, CURTY
1bde0 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1bdf0 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1be00 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1be10 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1be20 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1be30 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f   1;.  pCur->pgno
1be40 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65  Root = p2;.#ifde
1be50 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1be60 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20   pCur->wrFlag = 
1be70 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20  wrFlag;.#endif. 
1be80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1be90 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1bea0 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1beb0 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  o, pCur->uc.pCur
1bec0 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1bed0 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1bee0 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  o;.  /* Set the 
1bef0 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1bf00 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1bf10 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1bf20 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1bf30 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1bf40 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1bf50 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1bf60 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1bf70 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1bf80 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1bf90 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1bfa0 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1bfb0 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1bfc0 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1bfd0 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1bfe0 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1bff0 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1c000 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65  P4_KEYINFO;..ope
1c010 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1c020 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50  ts:.  assert( OP
1c030 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1c040 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1c050 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1c060 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53  _SEEKEQ==BTREE_S
1c070 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74  EEK_EQ );.  test
1c080 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20  case( pOp->p5 & 
1c090 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29  OPFLAG_BULKCSR )
1c0a0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1c0b0 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
1c0c0 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20  NTS.  testcase( 
1c0d0 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
1c0e0 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69  _SEEKEQ );.#endi
1c0f0 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  f.  sqlite3Btree
1c100 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28  CursorHintFlags(
1c110 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1c120 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
1c150 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1c160 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20  AG_SEEKEQ)));.  
1c170 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1c180 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
1c190 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  al P1 P2 * P4 P5
1c1a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1c1b0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f  olumn=P2.**.** O
1c1c0 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1c1d0 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
1c1e0 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
1c1f0 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
1c200 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
1c210 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
1c220 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1c230 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
1c240 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
1c250 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
1c260 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1c270 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
1c280 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
1c290 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
1c2a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c2b0 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
1c2c0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1c2d0 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
1c2e0 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
1c2f0 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
1c300 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
1c310 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
1c320 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1c330 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
1c340 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1c350 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
1c360 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
1c370 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
1c380 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  x..**.** The P5 
1c390 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65  parameter can be
1c3a0 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42   a mask of the B
1c3b0 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66  TREE_* flags def
1c3c0 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65  ined.** in btree
1c3d0 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73  .h.  These flags
1c3e0 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73   control aspects
1c3f0 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   of the operatio
1c400 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65  n of.** the btre
1c410 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d  e.  The BTREE_OM
1c420 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42  IT_JOURNAL and B
1c430 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67  TREE_SINGLE flag
1c440 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61  s are.** added a
1c450 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f  utomatically..*/
1c460 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c470 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
1c480 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
1c490 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1c4a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1c4b0 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
1c4c0 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  as OP_OpenEpheme
1c4d0 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a  ral.  It has a.*
1c4e0 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  * different name
1c4f0 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20   to distinguish 
1c500 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73  its use.  Tables
1c510 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
1c520 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  * by this opcode
1c530 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
1c540 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  r automatically 
1c550 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e  created transien
1c560 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20  t.** indices in 
1c570 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  joins..*/.case O
1c580 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a  P_OpenAutoindex:
1c590 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70   .case OP_OpenEp
1c5a0 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62  hemeral: {.  Vdb
1c5b0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1c5c0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1c5d0 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  o;..  static con
1c5e0 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1c5f0 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1c600 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1c610 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c620 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1c630 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1c640 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1c650 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1c660 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1c670 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1c680 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73  ANSIENT_DB;.  as
1c690 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c6a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c6b0 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1c6c0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1c6d0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1c6e0 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54  Op->p2, -1, CURT
1c6f0 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66  YPE_BTREE);.  if
1c700 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1c710 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1c720 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1c730 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d  x->isEphemeral =
1c740 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
1c750 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e  e3BtreeOpen(db->
1c760 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43  pVfs, 0, db, &pC
1c770 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20  x->pBt, .       
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c790 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1c7a0 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47  NAL | BTREE_SING
1c7b0 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66  LE | pOp->p5, vf
1c7c0 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  sFlags);.  if( r
1c7d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1c7e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1c7f0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
1c800 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20  pCx->pBt, 1);.  
1c810 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1c820 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
1c830 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
1c840 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
1c850 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
1c860 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
1c870 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1c880 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
1c890 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
1c8a0 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
1c8b0 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
1c8c0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1c8d0 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
1c8e0 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
1c8f0 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
1c900 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
1c910 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
1c920 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
1c930 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1c940 20 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66      if( (pKeyInf
1c950 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1c960 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20  Info)!=0 ){.    
1c970 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
1c980 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c990 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1c9a0 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
1c9b0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1c9c0 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
1c9d0 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1c9e0 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1c9f0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1ca00 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1ca10 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1ca20 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1ca30 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +1 );.        as
1ca40 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1ca50 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1ca60 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1ca70 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1ca80 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d   );.        pCx-
1ca90 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1caa0 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63  Info;.        rc
1cab0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1cac0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1cad0 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53  pgno, BTREE_WRCS
1cae0 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb00 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78     pKeyInfo, pCx
1cb10 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1cb20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1cb30 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1cb40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1cb50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1cb60 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1cb70 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42  , MASTER_ROOT, B
1cb80 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78            0, pCx
1cbb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1cbc0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1cbd0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1cbe0 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65  .  pCx->isOrdere
1cbf0 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54  d = (pOp->p5!=BT
1cc00 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a  REE_UNORDERED);.
1cc10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1cc20 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65  pcode: SorterOpe
1cc30 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  n P1 P2 P3 P4 *.
1cc40 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1cc50 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
1cc60 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78  OpenEphemeral ex
1cc70 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1cc80 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e  ns.** a transien
1cc90 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20  t index that is 
1cca0 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73  specifically des
1ccb0 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61  igned to sort la
1ccc0 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73  rge.** tables us
1ccd0 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20  ing an external 
1cce0 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72  merge-sort algor
1ccf0 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ithm..**.** If a
1cd00 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f  rgument P3 is no
1cd10 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  n-zero, then it 
1cd20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74  indicates that t
1cd30 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a  he sorter may.**
1cd40 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73   assume that a s
1cd50 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69  table sort consi
1cd60 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74  dering the first
1cd70 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61   P3 fields of ea
1cd80 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66  ch.** key is suf
1cd90 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75  ficient to produ
1cda0 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20  ce the required 
1cdb0 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65  results..*/.case
1cdc0 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20   OP_SorterOpen: 
1cdd0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1cde0 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1cdf0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1ce00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1ce10 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1ce20 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1ce30 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1ce40 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f  , -1, CURTYPE_SO
1ce50 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78  RTER);.  if( pCx
1ce60 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1ce70 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  m;.  pCx->pKeyIn
1ce80 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1ce90 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
1cea0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1ceb0 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65  db==db );.  asse
1cec0 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1ced0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1cee0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1cef0 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28  3VdbeSorterInit(
1cf00 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78  db, pOp->p3, pCx
1cf10 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1cf20 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1cf30 63 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a  ceTest P1 P2 * *
1cf40 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1cf50 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63  if( cursor[P1].c
1cf60 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a  tr++ ) pc = P2.*
1cf70 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
1cf80 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74  ter cursor. If t
1cf90 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e  he sequence coun
1cfa0 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
1cfb0 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74   zero, jump.** t
1cfc0 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73  o P2. Regardless
1cfd0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
1cfe0 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
1cff0 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20  aken, increment 
1d000 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65  the.** the seque
1d010 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  nce value..*/.ca
1d020 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65  se OP_SequenceTe
1d030 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  st: {.  VdbeCurs
1d040 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
1d050 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d060 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d070 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1d080 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1d090 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
1d0a0 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20  er(pC) );.  if( 
1d0b0 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29  (pC->seqCount++)
1d0c0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
1d0d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
1d0e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d0f0 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
1d100 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
1d110 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63  * Synopsis: P3 c
1d120 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a  olumns in r[P2].
1d130 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1d140 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
1d150 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61  nts to a fake ta
1d160 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1d170 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  s a single.** ro
1d180 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  w of data.  The 
1d190 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20  content of that 
1d1a0 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63  one row is the c
1d1b0 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  ontent of memory
1d1c0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
1d1d0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1d1e0 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f  , cursor P1 beco
1d1f0 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
1d200 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f   the .** MEM_Blo
1d210 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69  b content contai
1d220 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  ned in register 
1d230 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75  P2..**.** A pseu
1d240 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64  do-table created
1d250 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1d260 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
1d270 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1d280 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
1d290 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
1d2a0 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
1d2b0 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
1d2c0 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
1d2d0 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
1d2e0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20  _Column opcode. 
1d2f0 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
1d300 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20  pcode.** is the 
1d310 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f  only cursor opco
1d320 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69  de that works wi
1d330 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  th a pseudo-tabl
1d340 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74  e..**.** P3 is t
1d350 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
1d360 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
1d370 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ds that will be 
1d380 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65  stored by.** the
1d390 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1d3a0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73  /.case OP_OpenPs
1d3b0 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75  eudo: {.  VdbeCu
1d3c0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1d3d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d3e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d3f0 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p3>=0 );.  pC
1d400 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1d410 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1d420 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54  Op->p3, -1, CURT
1d430 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69  YPE_PSEUDO);.  i
1d440 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1d450 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1d460 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1d470 43 78 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62  Cx->uc.pseudoTab
1d480 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b  leReg = pOp->p2;
1d490 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1d4a0 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 1;.  assert( p
1d4b0 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62  Op->p5==0 );.  b
1d4c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1d4d0 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1d4e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1d4f0 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1d500 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1d510 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1d520 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1d530 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1d540 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1d550 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1d560 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1d570 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d580 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d590 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1d5a0 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1d5b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1d5c0 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1d5d0 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1d5e0 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  ak;.}..#ifdef SQ
1d5f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1d600 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20  MN_USED_MASK./* 
1d610 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55  Opcode: ColumnsU
1d620 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  sed P1 * * P4 *.
1d630 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1d640 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78  e (which only ex
1d650 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20 77  ists if SQLite w
1d660 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
1d670 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1d680 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1d690 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20 77  SK) identifies w
1d6a0 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  hich columns of 
1d6b0 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  the.** table or 
1d6c0 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72  index for cursor
1d6d0 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20 50   P1 are used.  P
1d6e0 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e  4 is a 64-bit in
1d6f0 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54  teger.** (P4_INT
1d700 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  64) in which the
1d710 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20 61   first 63 bits a
1d720 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  re one for each 
1d730 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  of the.** first 
1d740 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  63 columns of th
1d750 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1d760 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
1d770 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68  ly used.** by th
1d780 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68  e cursor.  The h
1d790 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73  igh-order bit is
1d7a0 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75   set if any colu
1d7b0 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20  mn after.** the 
1d7c0 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f  64th is used..*/
1d7d0 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73  .case OP_Columns
1d7e0 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75  Used: {.  VdbeCu
1d7f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d  rsor *pC;.  pC =
1d800 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d810 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1d820 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1d830 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
1d840 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28  C->maskUsed = *(
1d850 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36  u64*)pOp->p4.pI6
1d860 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  4;.  break;.}.#e
1d870 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
1d880 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33   SeekGE P1 P2 P3
1d890 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1d8a0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1d8b0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1d8c0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1d8d0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1d8e0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1d8f0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1d900 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1d910 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1d920 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1d930 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1d940 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1d950 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1d960 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1d970 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1d980 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1d990 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1d9a0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1d9b0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1d9c0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1d9d0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1d9e0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1d9f0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1da00 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1da10 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1da20 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1da30 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1da40 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1da50 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1da60 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1da70 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1da80 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1da90 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  If the cursor P1
1daa0 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e   was opened usin
1dab0 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45  g the OPFLAG_SEE
1dac0 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74  KEQ flag, then t
1dad0 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69  his.** opcode wi
1dae0 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f  ll always land o
1daf0 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  n a record that 
1db00 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74  equally equals t
1db10 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c  he key, or.** el
1db20 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  se jump immediat
1db30 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e  ely to P2.  When
1db40 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f   the cursor is O
1db50 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68  PFLAG_SEEKEQ, th
1db60 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73  is.** opcode mus
1db70 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t be followed by
1db80 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65   an IdxLE opcode
1db90 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61   with the same a
1dba0 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65  rguments..** The
1dbb0 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69   IdxLE opcode wi
1dbc0 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66  ll be skipped if
1dbd0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63   this opcode suc
1dbe0 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a  ceeds, but the.*
1dbf0 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  * IdxLE opcode w
1dc00 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73  ill be used on s
1dc10 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69  ubsequent loop i
1dc20 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  terations..**.**
1dc30 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1dc40 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1dc50 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1dc60 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1dc70 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1dc80 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1dc90 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1dca0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1dcb0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1dcc0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1dcd0 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1dce0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1dcf0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1dd00 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1dd10 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1dd20 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
1dd30 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1dd40 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1dd50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1dd60 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1dd70 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1dd80 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1dd90 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1dda0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1ddb0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1ddc0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1ddd0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1dde0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1ddf0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1de00 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1de10 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1de20 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1de30 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1de40 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1de50 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1de60 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1de70 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1de80 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1de90 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1dea0 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1deb0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1dec0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1ded0 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1dee0 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1def0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1df00 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1df10 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1df20 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1df30 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1df40 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1df50 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1df60 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1df70 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1df80 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1df90 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1dfa0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1dfb0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1dfc0 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1dfd0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1dfe0 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1dff0 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1e000 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1e010 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
1e020 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e030 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e040 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e050 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1e060 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1e070 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1e080 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1e090 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1e0a0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1e0b0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e0c0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e0d0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e0e0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e0f0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e100 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e110 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e120 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e130 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e140 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e150 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1e160 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1e170 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1e180 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1e190 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1e1a0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1e1b0 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1e1c0 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1e1d0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1e1e0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1e1f0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1e200 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1e210 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1e220 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1e230 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1e240 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1e250 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1e260 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1e270 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1e280 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1e290 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1e2a0 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1e2b0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1e2c0 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1e2d0 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1e2e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1e2f0 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
1e300 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e310 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e320 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e330 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1e340 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1e350 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1e360 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1e370 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1e380 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1e390 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e3a0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e3b0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e3c0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e3d0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e3e0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e3f0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e400 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e410 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e420 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e430 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1e440 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1e450 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1e460 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1e470 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1e480 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1e490 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1e4a0 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
1e4b0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1e4c0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1e4d0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1e4e0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1e4f0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1e500 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1e510 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1e520 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1e530 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1e540 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1e550 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1e560 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1e570 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1e580 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1e590 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1e5a0 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
1e5b0 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
1e5c0 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
1e5d0 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
1e5e0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
1e5f0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
1e600 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
1e610 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
1e620 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
1e630 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
1e640 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
1e650 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1e660 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
1e670 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1e680 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
1e690 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63   by an IdxGE opc
1e6a0 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
1e6b0 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
1e6c0 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65  The IdxGE opcode
1e6d0 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
1e6e0 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
1e6f0 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
1e700 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64  e.** IdxGE opcod
1e710 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
1e720 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
1e730 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
1e740 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1e750 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1e760 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1e770 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1e780 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
1e790 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1e7a0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a  .case OP_SeekLE:
1e7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1e7c0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1e7d0 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
1e7e0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1e7f0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a  .case OP_SeekGT:
1e800 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1e810 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1e820 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  es;           /*
1e830 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
1e840 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20  lt */.  int oc; 
1e850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
1e860 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  code */.  VdbeCu
1e870 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
1e880 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65  The cursor to se
1e890 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64  ek */.  Unpacked
1e8a0 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68  Record r;  /* Th
1e8b0 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f  e key to seek fo
1e8c0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1e8d0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
1e8e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f  ber of columns o
1e8f0 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  r fields in the 
1e900 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  key */.  i64 iKe
1e910 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  y;          /* T
1e920 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1e930 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20  to seek to */.  
1e940 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20  int eqOnly;     
1e950 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72     /* Only inter
1e960 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75  ested in == resu
1e970 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  lts */..  assert
1e980 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1e990 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1e9a0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1e9b0 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1e9c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1e9d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1e9e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1e9f0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1ea00 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1ea10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1ea20 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65  _SeekLE == OP_Se
1ea30 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLT+1 );.  asse
1ea40 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d  rt( OP_SeekGE ==
1ea50 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a   OP_SeekLT+2 );.
1ea60 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1ea70 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGT == OP_SeekLT
1ea80 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
1ea90 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
1eaa0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
1eab0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
1eac0 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1ead0 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30  de;.  eqOnly = 0
1eae0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1eaf0 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
1eb00 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1eb10 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1eb20 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  ode;.#endif..  i
1eb30 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
1eb40 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52  {.    /* The BTR
1eb50 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20  EE_SEEK_EQ flag 
1eb60 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69  is only set on i
1eb70 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a  ndex cursors */.
1eb80 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1eb90 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
1eba0 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
1ebb0 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
1ebc0 5f 45 51 29 3d 3d 30 20 29 3b 0a 0a 20 20 20 20  _EQ)==0 );..    
1ebd0 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1ebe0 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1ebf0 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1ec00 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1ec10 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
1ec20 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1ec30 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1ec40 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1ec50 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1ec60 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1ec70 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20  convert it. */. 
1ec80 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
1ec90 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66  pOp->p3];.    if
1eca0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1ecb0 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
1ecc0 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
1ecd0 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
1ece0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1ecf0 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
1ed00 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
1ed10 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1ed20 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f  ue(pIn3);..    /
1ed30 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1ed40 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
1ed50 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1ed60 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
1ed70 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20  .    ** loss of 
1ed80 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
1ed90 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
1eda0 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
1edb0 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ... */.    if( (
1edc0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1edd0 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
1ede0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1edf0 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
1ee00 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
1ee10 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1ee20 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
1ee30 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
1ee40 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
1ee50 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1ee60 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1ee70 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1ee80 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1ee90 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1eea0 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75  en(1,2); goto ju
1eeb0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20  mp_to_p2;.      
1eec0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1eed0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1eee0 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1eef0 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
1ef00 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1ef10 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1ef20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1ef30 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
1ef40 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
1ef50 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
1ef60 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
1ef70 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
1ef80 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
1ef90 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
1efa0 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1efb0 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
1efc0 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
1efd0 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
1efe0 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
1eff0 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
1f000 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
1f010 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
1f020 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1f030 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1f040 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
1f050 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1f060 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
1f070 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
1f080 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1f090 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
1f0a0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
1f0b0 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1f0c0 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1f0d0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1f0e0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
1f0f0 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
1f100 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1f110 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1f120 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
1f130 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
1f140 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
1f150 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
1f160 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
1f170 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
1f180 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
1f190 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
1f1a0 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1f1b0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
1f1c0 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
1f1d0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1f1e0 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
1f1f0 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
1f200 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1f210 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
1f220 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
1f230 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1f240 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1f250 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
1f260 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1f270 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
1f280 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  } .    rc = sqli
1f290 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1f2a0 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
1f2b0 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
1f2c0 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1f2d0 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
1f2e0 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
1f2f0 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
1f300 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21  e */.    if( rc!
1f310 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1f320 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1f330 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1f340 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1f350 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20  /* For a cursor 
1f360 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53  with the BTREE_S
1f370 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c  EEK_EQ hint, onl
1f380 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20  y the OP_SeekGE 
1f390 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65  and.    ** OP_Se
1f3a0 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65  ekLE opcodes are
1f3b0 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68   allowed, and th
1f3c0 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65  ese must be imme
1f3d0 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64  diately followed
1f3e0 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50  .    ** by an OP
1f3f0 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78  _IdxGT or OP_Idx
1f400 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65  LT opcode, respe
1f410 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68  ctively, with th
1f420 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20  e same key..    
1f430 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  */.    if( sqlit
1f440 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
1f450 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
1f460 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
1f470 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f  EQ) ){.      eqO
1f480 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  nly = 1;.      a
1f490 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1f4a0 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  de==OP_SeekGE ||
1f4b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1f4c0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20  _SeekLE );.     
1f4d0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1f4e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
1f4f0 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64   || pOp[1].opcod
1f500 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
1f510 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f520 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p1==pOp[0].p
1f530 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  1 );.      asser
1f540 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f  t( pOp[1].p2==pO
1f550 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20  p[0].p2 );.     
1f560 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1f570 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b  p3==pOp[0].p3 );
1f580 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f590 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b  Op[1].p4.i==pOp[
1f5a0 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d  0].p4.i );.    }
1f5b0 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ..    nField = p
1f5c0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73  Op->p4.i;.    as
1f5d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1f5e0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1f5f0 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
1f600 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  d>0 );.    r.pKe
1f610 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1f620 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1f630 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
1f640 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;..    /* The ne
1f650 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
1f660 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
1f670 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
1f680 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f  :.    **   if( o
1f690 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c==OP_SeekGT || 
1f6a0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b  oc==OP_SeekLE ){
1f6b0 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1f6c0 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
1f6d0 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1f6e0 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1f6f0 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20  ult_rc = +1;.   
1f700 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
1f710 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1f720 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50  = ((1 & (oc - OP
1f730 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a  _SeekLT)) ? -1 :
1f740 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74   +1);.    assert
1f750 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc!=OP_SeekGT 
1f760 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1f770 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1f780 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45  t( oc!=OP_SeekLE
1f790 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1f7a0 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
1f7b0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1f7c0 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
1f7d0 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  c==+1 );.    ass
1f7e0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1f7f0 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LT || r.default_
1f800 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72  rc==+1 );..    r
1f810 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1f820 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
1f830 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1f840 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1f850 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1f860 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1f870 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1f880 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1f890 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61    ExpandBlob(r.a
1f8a0 4d 65 6d 29 3b 0a 20 20 20 20 72 2e 65 71 53 65  Mem);.    r.eqSe
1f8b0 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  en = 0;.    rc =
1f8c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1f8d0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1f8e0 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  uc.pCursor, &r, 
1f8f0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1f900 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1f910 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1f920 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f930 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
1f940 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65  f( eqOnly && r.e
1f950 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  qSeen==0 ){.    
1f960 20 20 61 73 73 65 72 74 28 20 72 65 73 21 3d 30    assert( res!=0
1f970 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73   );.      goto s
1f980 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20  eek_not_found;. 
1f990 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64     }.  }.  pC->d
1f9a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1f9b0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1f9c0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1f9d0 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1f9e0 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1f9f0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1fa00 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63  .#endif.  if( oc
1fa10 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20  >=OP_SeekGE ){  
1fa20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1fa30 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGE || oc==OP_
1fa40 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66  SeekGT );.    if
1fa50 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1fa60 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1fa70 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kGT) ){.      re
1fa80 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1fa90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
1faa0 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  xt(pC->uc.pCurso
1fab0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1fac0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1fad0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1fae0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1faf0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
1fb00 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
1fb10 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
1fb20 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc==OP_SeekLT 
1fb30 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1fb40 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e   );.    if( res>
1fb50 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1fb60 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29  oc==OP_SeekLT) )
1fb70 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
1fb80 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1fb90 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
1fba0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
1fbb0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1fbc0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1fbd0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1fbe0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1fbf0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72  else{.      /* r
1fc00 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1fc10 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1fc20 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1fc30 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1fc40 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
1fc50 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
1fc60 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20     */.      res 
1fc70 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1fc80 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  f(pC->uc.pCursor
1fc90 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65  );.    }.  }.see
1fca0 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61  k_not_found:.  a
1fcb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
1fcc0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
1fcd0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
1fce0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
1fcf0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
1fd00 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65  2;.  }else if( e
1fd10 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73  qOnly ){.    ass
1fd20 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
1fd30 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20  de==OP_IdxLT || 
1fd40 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
1fd50 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70  P_IdxGT );.    p
1fd60 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68  Op++; /* Skip th
1fd70 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50  e OP_IdxLt or OP
1fd80 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c  _IdxGT that foll
1fd90 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65  ows */.  }.  bre
1fda0 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63  ak;.}.  ../* Opc
1fdb0 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
1fdc0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1fdd0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1fde0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1fdf0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1fe00 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1fe10 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1fe20 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1fe30 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1fe40 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1fe50 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1fe60 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1fe70 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1fe80 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
1fe90 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1fea0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1feb0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1fec0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1fed0 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
1fee0 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1fef0 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1ff00 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
1ff10 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
1ff20 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1ff30 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1ff40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1ff50 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1ff60 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
1ff70 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20  te where it can 
1ff80 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1ff90 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69  n the forward di
1ffa0 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65  rection.  The Ne
1ffb0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
1ffc0 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74  ill work,.** but
1ffd0 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e   not the Prev in
1ffe0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1fff0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
20000 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
20010 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
20020 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
20030 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
20040 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
20050 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
20060 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
20070 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
20080 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
20090 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
200a0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
200b0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
200c0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
200d0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
200e0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
200f0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
20100 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
20110 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
20120 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
20130 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
20140 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
20150 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
20160 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
20170 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
20180 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
20190 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
201a0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
201b0 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
201c0 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
201d0 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
201e0 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
201f0 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
20200 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
20210 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
20220 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
20230 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
20240 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
20250 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
20260 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
20270 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
20280 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
20290 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
202a0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
202b0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
202c0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
202d0 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
202e0 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
202f0 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
20300 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
20310 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43  , NotExists, NoC
20320 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70  onflict.*/./* Op
20330 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74  code: NoConflict
20340 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
20350 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
20360 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
20370 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
20380 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
20390 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
203a0 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
203b0 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
203c0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
203d0 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
203e0 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
203f0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
20400 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
20410 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
20420 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
20430 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
20440 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
20450 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e  P3 and P4.** con
20460 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76  tains any NULL v
20470 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
20480 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
20490 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
204a0 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65  he.** record are
204b0 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61   not-NULL then a
204c0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74   check is done t
204d0 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
204e0 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a  ny row in the.**
204f0 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20   P1 index btree 
20500 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b  has a matching k
20510 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74  ey prefix.  If t
20520 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63  here are no matc
20530 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d  hes, jump.** imm
20540 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20550 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d   If there is a m
20560 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75  atch, fall throu
20570 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  gh and leave the
20580 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f   P1.** cursor po
20590 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61  inting to the ma
205a0 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a  tching row..**.*
205b0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
205c0 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e   similar to OP_N
205d0 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65  otFound with the
205e0 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74   exceptions that
205f0 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69   the.** branch i
20600 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69  s always taken i
20610 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  f any part of th
20620 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70  e search key inp
20630 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ut is NULL..**.*
20640 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
20650 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
20660 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
20670 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
20680 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
20690 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
206a0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
206b0 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
206c0 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
206d0 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
206e0 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
206f0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
20700 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e  : NotFound, Foun
20710 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  d, NotExists.*/.
20720 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
20730 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
20740 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
20750 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
20760 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
20770 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
20780 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
20790 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
207a0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
207b0 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
207c0 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
207d0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
207e0 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65  es;.  char *pFre
207f0 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
20800 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
20810 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
20820 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
20830 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
20840 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
20850 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34   + sizeof(Mem)*4
20860 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53   + 7];..#ifdef S
20870 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28  QLITE_TEST.  if(
20880 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
20890 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71  _NoConflict ) sq
208a0 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
208b0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61  t++;.#endif..  a
208c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
208d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
208e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
208f0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
20900 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
20910 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20920 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20930 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65  ( pC!=0 );.#ifde
20940 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
20950 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
20960 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
20970 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  f.  pIn3 = &aMem
20980 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
20990 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
209a0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
209b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
209c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
209d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
209e0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
209f0 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 69 66   pFree = 0;.  if
20a00 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
20a10 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
20a20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
20a30 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
20a40 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
20a50 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
20a60 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  ;.    for(ii=0; 
20a70 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
20a80 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      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 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
20ab0 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72     ExpandBlob(&r
20ac0 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64  .aMem[ii]);.#ifd
20ad0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20ae0 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
20af0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
20b00 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
20b10 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  m[ii]);.#endif. 
20b20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79     }.    pIdxKey
20b30 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = &r;.  }else{.
20b40 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
20b50 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e  lite3VdbeAllocUn
20b60 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20  packedRecord(.  
20b70 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e        pC->pKeyIn
20b80 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69  fo, aTempRec, si
20b90 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20  zeof(aTempRec), 
20ba0 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20  &pFree.    );.  
20bb0 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
20bc0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
20bd0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
20be0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
20bf0 6f 62 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  ob );.    Expand
20c00 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
20c10 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
20c20 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
20c30 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
20c40 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
20c50 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  ;.  }.  pIdxKey-
20c60 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
20c70 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b  .  takeJump = 0;
20c80 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
20c90 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
20ca0 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
20cb0 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
20cc0 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
20cd0 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
20ce0 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
20cf0 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
20d00 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
20d10 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
20d20 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
20d30 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
20d40 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
20d50 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
20d60 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
20d70 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
20d80 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
20d90 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a  ){.        takeJ
20da0 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ump = 1;.       
20db0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
20dc0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
20dd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
20de0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
20df0 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  uc.pCursor, pIdx
20e00 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
20e10 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
20e20 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
20e30 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
20e40 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  K ){.    break;.
20e50 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
20e60 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
20e70 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
20e80 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
20e90 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
20ea0 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
20eb0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
20ec0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
20ed0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20ee0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
20ef0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
20f00 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
20f10 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
20f20 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
20f30 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
20f40 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
20f50 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
20f60 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
20f70 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65  n(takeJump||alre
20f80 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b  adyExists==0,2);
20f90 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d  .    if( takeJum
20fa0 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69  p || !alreadyExi
20fb0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
20fc0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
20fd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20fe0 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
20ff0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
21000 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
21010 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
21020 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
21030 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
21040 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
21050 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
21060 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61   keys).  P3 is a
21070 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  n integer rowid.
21080 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74    If P1 does not
21090 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
210a0 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20  d with.** rowid 
210b0 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
210c0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
210d0 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
210e0 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c   raise an.** SQL
210f0 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f  ITE_CORRUPT erro
21100 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  r. If P1 does co
21110 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
21120 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
21130 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
21140 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
21150 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
21160 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
21170 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
21180 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
21190 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
211a0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
211b0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
211c0 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
211d0 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
211e0 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
211f0 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
21200 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
21210 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
21220 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
21230 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
21240 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
21250 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
21260 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
21270 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
21280 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
21290 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
212a0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
212b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
212c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
212d0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
212e0 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
212f0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
21300 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
21310 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
21320 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
21330 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
21340 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
21350 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21360 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
21370 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
21380 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
21390 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
213a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
213b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
213c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
213d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
213e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
213f0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
21400 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61   = 0;.#endif.  a
21410 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
21420 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
21430 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
21440 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
21450 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
21460 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
21470 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
21480 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79   res = 0;.  iKey
21490 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
214a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
214b0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
214c0 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20  pCrsr, 0, iKey, 
214d0 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  0, &res);.  asse
214e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
214f0 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20  K || res==0 );. 
21500 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
21510 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
21520 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
21530 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  */.  pC->nullRow
21540 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21550 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21560 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
21570 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
21580 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
21590 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
215a0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
215b0 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21   res;.  if( res!
215c0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
215d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
215e0 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
215f0 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  p2==0 ){.      r
21600 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
21610 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  PT_BKPT;.    }el
21620 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  se{.      goto j
21630 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
21640 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21650 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
21660 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
21670 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
21680 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
21690 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
216a0 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
216b0 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
216c0 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
216d0 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
216e0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
216f0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
21700 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
21710 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
21720 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
21730 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
21740 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
21750 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
21760 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
21770 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
21780 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21790 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
217a0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
217b0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
217c0 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
217d0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
217e0 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54  [pOp->p1]->eCurT
217f0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
21800 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  B );.  pOut = ou
21810 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
21820 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
21830 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
21840 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
21850 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
21860 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
21870 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
21880 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
21890 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
218a0 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
218b0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
218c0 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
218d0 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
218e0 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
218f0 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
21900 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
21910 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
21920 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
21930 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
21940 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
21950 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
21960 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
21970 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
21980 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
21990 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
219a0 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
219b0 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
219c0 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
219d0 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
219e0 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
219f0 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
21a00 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
21a10 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
21a20 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
21a30 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
21a40 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
21a50 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
21a60 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
21a70 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20  maximum, .** an 
21a80 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
21a90 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
21aa0 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
21ab0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
21ac0 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
21ad0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
21ae0 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
21af0 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
21b00 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
21b10 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
21b20 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
21b30 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
21b40 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
21b50 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b  out2 */.  i64 v;
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b70 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
21b80 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
21b90 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
21ba0 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
21bb0 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
21bc0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
21bd0 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
21be0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
21bf0 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
21c00 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
21c10 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
21c20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
21c30 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
21c40 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
21c50 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
21c60 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
21c70 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
21c80 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
21c90 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
21ca0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
21cb0 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
21cc0 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
21cd0 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
21ce0 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f   = 0;.  pOut = o
21cf0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
21d00 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
21d10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21d20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21d30 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
21d40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21d50 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21d60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21d70 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
21d80 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
21d90 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
21da0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20  sor!=0 );.  {.  
21db0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
21dc0 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
21dd0 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
21de0 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
21df0 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
21e00 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
21e10 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
21e20 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
21e30 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
21e40 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
21e50 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
21e60 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
21e70 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
21e80 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
21e90 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
21ea0 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
21eb0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
21ec0 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
21ed0 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
21ee0 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
21ef0 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
21f00 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
21f10 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
21f20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
21f30 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
21f40 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
21f50 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
21f60 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
21f70 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
21f80 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
21f90 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
21fa0 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
21fb0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
21fc0 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
21fd0 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
21fe0 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
21ff0 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
22000 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
22010 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
22020 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
22030 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
22040 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
22050 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
22060 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
22070 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
22080 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
22090 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
220a0 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
220b0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
220c0 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
220d0 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
220e0 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
220f0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
22100 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
22110 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
22120 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
22130 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
22140 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
22150 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
22160 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
22170 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
22180 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
22190 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
221a0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
221b0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
221c0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
221d0 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
221e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
221f0 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
22200 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
22210 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
22220 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
22230 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22240 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
22250 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
22260 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
22270 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
22280 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
22290 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
222a0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
222b0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
222c0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29  C->uc.pCursor) )
222d0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
222e0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
222f0 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ze(pC->uc.pCurso
22300 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
22310 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
22320 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
22330 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
22340 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
22350 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  */.        if( v
22360 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
22370 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
22380 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
22390 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
223a0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
223b0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
223c0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
223d0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
223e0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
223f0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
22400 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
22410 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
22420 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
22430 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
22440 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
22450 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
22460 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
22470 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
22480 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
22490 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
224a0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
224b0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
224c0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
224d0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
224e0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
224f0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
22500 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22510 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
22520 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
22530 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
22540 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
22550 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
22560 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
22570 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
22580 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
22590 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
225a0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
225b0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
225c0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
225d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
225e0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
225f0 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
22600 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
22610 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
22620 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
22630 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
22640 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
22650 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
22660 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
22670 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
22680 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
22690 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
226a0 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
226b0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
226c0 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
226d0 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
226e0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
226f0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
22700 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
22710 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
22720 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20  2275-61338 */.  
22730 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
22740 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
22750 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
22760 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
22770 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
22780 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
22790 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
227a0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
227b0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
227c0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
227d0 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
227e0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
227f0 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
22800 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
22810 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
22820 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
22830 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
22840 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
22850 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
22860 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
22870 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
22880 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
22890 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
228a0 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
228b0 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
228c0 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
228d0 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
228e0 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
228f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
22900 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
22910 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
22920 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
22930 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
22960 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
22970 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  . */.      cnt =
22980 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
22990 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
229a0 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
229b0 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
229c0 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
229d0 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45  >>1); v++;  /* E
229e0 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20  nsure that v is 
229f0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
22a00 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c  o */.      }whil
22a10 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  e(  ((rc = sqlit
22a20 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
22a30 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
22a40 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
22a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a80 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
22a90 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
22aa0 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
22ac0 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
22ad0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
22ae0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
22af0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
22b00 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
22b10 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
22b20 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
22b30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22b40 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
22b50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
22b60 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
22b70 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
22b80 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
22b90 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
22ba0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
22bb0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22bc0 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
22bd0 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
22be0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
22bf0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
22c00 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
22c10 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64  : intkey=r[P3] d
22c20 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
22c30 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
22c40 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
22c50 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
22c60 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
22c70 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
22c80 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
22c90 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
22ca0 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
22cb0 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
22cc0 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
22cd0 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
22ce0 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
22cf0 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
22d00 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
22d10 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
22d20 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
22d30 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
22d40 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
22d50 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
22d60 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
22d70 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
22d80 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
22d90 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
22da0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
22db0 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
22dc0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
22dd0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
22de0 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
22df0 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
22e00 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
22e10 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
22e20 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
22e30 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
22e40 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
22e50 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
22e60 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
22e70 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
22e80 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  ag of P5 is set 
22e90 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  and if the resul
22ea0 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74  t of.** the last
22eb0 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
22ec0 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77  (OP_NotExists) w
22ed0 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68  as a success, th
22ee0 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61  en this.** opera
22ef0 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74  tion will not at
22f00 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
22f10 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f  e appropriate ro
22f20 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a  w before doing.*
22f30 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74  * the insert but
22f40 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76   will instead ov
22f50 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20  erwrite the row 
22f60 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20  that the cursor 
22f70 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  is.** currently 
22f80 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72  pointing to.  Pr
22f90 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72  esumably, the pr
22fa0 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ior OP_NotExists
22fb0 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61   opcode.** has a
22fc0 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65  lready positione
22fd0 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72  d the cursor cor
22fe0 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73  rectly.  This is
22ff0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
23000 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20  .** that boosts 
23010 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61  performance by a
23020 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e  voiding redundan
23030 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49  t seeks..**.** I
23040 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
23050 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
23060 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
23070 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
23080 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
23090 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
230a0 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
230b0 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
230c0 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
230d0 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
230e0 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
230f0 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
23100 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
23110 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
23120 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
23130 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
23140 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  nt to a string c
23150 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
23160 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20  ble-name, or.** 
23170 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
23180 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  it is not NULL, 
23190 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
231a0 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65  hook .** (sqlite
231b0 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
231c0 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f  k) is invoked fo
231d0 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
231e0 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
231f0 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
23200 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
23210 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
23220 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
23230 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
23240 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
23250 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
23260 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
23270 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
23280 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
23290 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
232a0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
232b0 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
232c0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
232d0 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
232e0 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
232f0 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
23300 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
23310 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
23320 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
23330 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
23340 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
23350 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
23360 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
23370 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
23380 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
23390 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
233a0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
233b0 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20  sis:  intkey=P3 
233c0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
233d0 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
233e0 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
233f0 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
23400 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
23410 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
23420 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
23430 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
23440 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
23450 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
23460 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
23470 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
23480 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
23490 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
234a0 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
234b0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
234c0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
234d0 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
234e0 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
234f0 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
23500 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
23510 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
23520 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
23530 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72  ROWID or key for
23540 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
23550 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
23560 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
23570 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
23580 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
23590 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
235a0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  n */.  int nZero
235b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
235c0 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73  er of zero-bytes
235d0 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20   to append */.  
235e0 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
235f0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
23600 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
23610 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
23620 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
23630 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
23640 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
23650 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
23660 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63  date hook */.  c
23670 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b  onst char *zTbl;
23680 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d   /* Table name -
23690 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64   used by the opd
236a0 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e  ate hook */.  in
236b0 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  t op;           
236c0 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70  /* Opcode for up
236d0 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54  date hook: SQLIT
236e0 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49  E_UPDATE or SQLI
236f0 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20  TE_INSERT */..  
23700 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f  pData = &aMem[pO
23710 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
23720 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23730 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23740 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
23750 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61  memIsValid(pData
23760 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
23770 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23780 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23790 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
237a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
237b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
237c0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
237d0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
237e0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
237f0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
23800 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
23810 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
23820 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
23830 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
23840 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
23850 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
23860 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
23870 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
23880 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
23890 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
238a0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
238b0 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65  , pKey);.    iKe
238c0 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
238d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
238e0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
238f0 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
23900 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d  .    iKey = pOp-
23910 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
23920 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
23930 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
23940 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
23950 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
23960 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
23970 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
23980 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
23990 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
239a0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
239b0 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b     pData->z = 0;
239c0 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20  .    pData->n = 
239d0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
239e0 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
239f0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
23a00 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d  |MEM_Str) );.  }
23a10 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
23a20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
23a30 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
23a40 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
23a50 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
23a60 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
23a70 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a  M_Zero ){.    nZ
23a80 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
23a90 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
23aa0 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
23ab0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
23ac0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
23ad0 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69  uc.pCursor, 0, i
23ae0 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Key,.           
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
23b00 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
23b10 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f      (pOp->p5 & O
23b40 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30  PFLAG_APPEND)!=0
23b50 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29  , seekResult.  )
23b60 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
23b70 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
23b80 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
23b90 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
23ba0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
23bb0 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
23bc0 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
23bd0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
23be0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
23bf0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
23c00 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64  z ){.    zDb = d
23c10 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
23c20 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20  zName;.    zTbl 
23c30 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
23c40 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20   op = ((pOp->p5 
23c50 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
23c60 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
23c70 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
23c80 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  RT);.    assert(
23c90 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
23ca0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
23cb0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
23cc0 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
23cd0 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20   zTbl, iKey);.  
23ce0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
23cf0 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72  b>=0 );.  }.  br
23d00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23d10 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20  e: Delete P1 P2 
23d20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65  * P4 P5.**.** De
23d30 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
23d40 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
23d50 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
23d60 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
23d70 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
23d80 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62  G_SAVEPOSITION b
23d90 69 74 20 6f 66 20 74 68 65 20 50 35 20 70 61 72  it of the P5 par
23da0 61 6d 65 74 65 72 20 69 73 20 73 65 74 2c 20 74  ameter is set, t
23db0 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  hen.** the curso
23dc0 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
23dd0 6f 69 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68  ointing at  eith
23de0 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
23df0 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
23e00 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
23e10 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
23e20 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
23e30 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
23e40 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
23e50 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
23e60 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
23e70 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69  . As a result, i
23e80 6e 20 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69  n this case.** i
23e90 74 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74  t is ok to delet
23ea0 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  e a record from 
23eb0 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f  within a Next lo
23ec0 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41  op. If .** OPFLA
23ed0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62  G_SAVEPOSITION b
23ee0 69 74 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61  it of P5 is clea
23ef0 72 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  r, then the curs
23f00 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65  or will be.** le
23f10 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e  ft in an undefin
23f20 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ed state..**.** 
23f30 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55  If the OPFLAG_AU
23f40 58 44 45 4c 45 54 45 20 62 69 74 20 69 73 20 73  XDELETE bit is s
23f50 65 74 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69  et on P5, that i
23f60 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
23f70 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65  is.** delete one
23f80 20 6f 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f   of several asso
23f90 63 69 61 74 65 64 20 77 69 74 68 20 64 65 6c 65  ciated with dele
23fa0 74 69 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77  ting a table row
23fb0 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20   and all its.** 
23fc0 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78  associated index
23fd0 20 65 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74   entries.  Exact
23fe0 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20  ly one of those 
23ff0 64 65 6c 65 74 65 73 20 69 73 20 74 68 65 20 22  deletes is the "
24000 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65  primary".** dele
24010 74 65 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20  te.  The others 
24020 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41  are all on OPFLA
24030 47 5f 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73  G_FORDELETE curs
24040 6f 72 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a  ors or else are.
24050 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74  ** marked with t
24060 68 65 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61  he AUXDELETE fla
24070 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  g..**.** If the 
24080 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
24090 6c 61 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50  lag of P2 (NB: P
240a0 32 20 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74  2 not P5) is set
240b0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a  , then the row.*
240c0 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  * change count i
240d0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  s incremented (o
240e0 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
240f0 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
24100 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
24110 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
24120 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
24130 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
24140 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
24150 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
24160 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65  n it is the name
24170 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
24180 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e  at P1 is.** poin
24190 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70  ting to.  The up
241a0 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62  date hook will b
241b0 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74  e invoked, if it
241c0 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50   exists..** If P
241d0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
241e0 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  en the P1 cursor
241f0 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
24200 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73  positioned.** us
24210 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
24220 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
24230 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
24240 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
24250 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24260 20 2a 70 43 3b 0a 20 20 75 38 20 68 61 73 55 70   *pC;.  u8 hasUp
24270 64 61 74 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a 20  dateCallback;.. 
24280 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24290 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
242a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
242b0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
242c0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
242d0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
242e0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
242f0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
24300 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24310 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
24320 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24330 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
24340 30 20 29 3b 0a 0a 20 20 68 61 73 55 70 64 61 74  0 );..  hasUpdat
24350 65 43 61 6c 6c 62 61 63 6b 20 3d 20 64 62 2d 3e  eCallback = db->
24360 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
24370 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20  && pOp->p4.z && 
24380 70 43 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 69  pC->isTable;.  i
24390 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 68 61  f( pOp->p5 && ha
243a0 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  sUpdateCallback 
243b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
243c0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75  reeKeySize(pC->u
243d0 63 2e 70 43 75 72 73 6f 72 2c 20 26 70 43 2d 3e  c.pCursor, &pC->
243e0 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
243f0 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
24400 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54 68 65  E_DEBUG.  /* The
24410 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
24420 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20  that positioned 
24430 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
24440 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20 77 69   to OP_Delete wi
24450 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61 6c 73  ll.  ** have als
24460 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
24470 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
24480 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
24490 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 20 20   the row that.  
244a0 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  ** is being dele
244b0 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ted */.  if( pOp
244c0 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73  ->p4.z && pC->is
244d0 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 35  Table && pOp->p5
244e0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 36 34 20 69  ==0 ){.    i64 i
244f0 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  Key = 0;.    sql
24500 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
24510 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24520 20 26 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73   &iKey);.    ass
24530 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  ert( pC->movetoT
24540 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20 0a  arget==iKey ); .
24550 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
24560 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74   Only flags that
24570 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20   can be set are 
24580 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64  SAVEPOISTION and
24590 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20   AUXDELETE */ . 
245a0 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
245b0 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56  5 & ~(OPFLAG_SAV
245c0 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47  EPOSITION|OPFLAG
245d0 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20  _AUXDELETE))==0 
245e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
245f0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
24600 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  ==BTREE_SAVEPOSI
24610 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74  TION );.  assert
24620 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  ( OPFLAG_AUXDELE
24630 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c  TE==BTREE_AUXDEL
24640 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ETE );..#ifdef S
24650 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
24660 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29  ( p->pFrame==0 )
24670 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  {.    if( pC->is
24680 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20  Ephemeral==0.   
24690 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35       && (pOp->p5
246a0 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c   & OPFLAG_AUXDEL
246b0 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  ETE)==0.        
246c0 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26  && (pC->wrFlag &
246d0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
246e0 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  E)==0.      ){. 
246f0 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
24700 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  e++;.    }.    i
24710 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
24720 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
24730 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
24740 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  e--;.    }.  }.#
24750 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71  endif..  rc = sq
24760 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
24770 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24780 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d   pOp->p5);.  pC-
24790 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
247a0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
247b0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
247c0 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
247d0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
247e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
247f0 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63  hasUpdateCallbac
24800 6b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70  k ){.    db->xUp
24810 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
24820 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c  >pUpdateArg, SQL
24830 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20  ITE_DELETE,.    
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24850 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e      db->aDb[pC->
24860 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d  iDb].zName, pOp-
24870 3e 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74  >p4.z, pC->movet
24880 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20 61 73  oTarget);.    as
24890 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
248a0 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
248b0 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
248c0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
248d0 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
248e0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
248f0 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
24900 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
24910 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
24920 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
24930 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
24940 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
24950 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
24960 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
24970 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
24980 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
24990 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
249a0 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
249b0 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
249c0 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
249d0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
249e0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
249f0 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
24a00 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
24a10 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
24a20 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
24a30 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
24a40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24a50 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
24a60 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  re P1 P2 P3 P4.*
24a70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
24a80 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b  key(P1)!=trim(r[
24a90 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a  P3],P4) goto P2.
24aa0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
24ab0 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69  rter cursor. Thi
24ac0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
24ad0 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20  mpares a prefix 
24ae0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
24af0 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
24b00 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70  r P3 against a p
24b10 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74  refix of the ent
24b20 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20  ry that .** the 
24b30 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75  sorter cursor cu
24b40 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74  rrently points t
24b50 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72  o.  Only the fir
24b60 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20  st P4 fields.** 
24b70 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65  of r[P3] and the
24b80 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61   sorter record a
24b90 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a  re compared..**.
24ba0 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20  ** If either P3 
24bb0 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f  or the sorter co
24bc0 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e  ntains a NULL in
24bd0 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69   one of their si
24be0 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65  gnificant.** fie
24bf0 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e  lds (not countin
24c00 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20  g the P4 fields 
24c10 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68  at the end which
24c20 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68   are ignored) th
24c30 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  en.** the compar
24c40 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20  ison is assumed 
24c50 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a  to be equal..**.
24c60 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  ** Fall through 
24c70 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  to next instruct
24c80 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72  ion if the two r
24c90 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65  ecords compare e
24ca0 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20  qual to.** each 
24cb0 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20  other.  Jump to 
24cc0 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64  P2 if they are d
24cd0 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73  ifferent..*/.cas
24ce0 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61  e OP_SorterCompa
24cf0 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  re: {.  VdbeCurs
24d00 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
24d10 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c  s;.  int nKeyCol
24d20 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
24d30 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24d40 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24d50 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  pC) );.  assert(
24d60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
24d70 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33  _INT32 );.  pIn3
24d80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
24d90 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70  ];.  nKeyCol = p
24da0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20  Op->p4.i;.  res 
24db0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
24dc0 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
24dd0 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e  pare(pC, pIn3, n
24de0 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20  KeyCol, &res);. 
24df0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
24e00 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
24e10 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
24e20 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
24e30 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.};../* Opcode:
24e40 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50   SorterData P1 P
24e50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
24e60 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
24e70 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
24e80 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
24e90 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72  e current sorter
24ea0 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72   data for sorter
24eb0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
24ec0 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f  hen clear the co
24ed0 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68  lumn header cach
24ee0 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a  e on cursor P3..
24ef0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
24f00 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73  e is normally us
24f10 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f  e to move a reco
24f20 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f  rd out of the so
24f30 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a  rter and into.**
24f40 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
24f50 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66   is the source f
24f60 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  or a pseudo-tabl
24f70 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64  e cursor created
24f80 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73   using.** OpenPs
24f90 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75  eudo.  That pseu
24fa0 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20  do-table cursor 
24fb0 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20  is the one that 
24fc0 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
24fd0 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33  .** parameter P3
24fe0 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20  .  Clearing the 
24ff0 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  P3 column cache 
25000 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
25010 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20  opcode saves.** 
25020 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74  us from having t
25030 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61  o issue a separa
25040 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72  te NullRow instr
25050 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20  uction to clear 
25060 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63  that cache..*/.c
25070 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74  ase OP_SorterDat
25080 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
25090 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d  r *pC;..  pOut =
250a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
250b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
250c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
250d0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
250e0 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
250f0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77  te3VdbeSorterRow
25100 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20  key(pC, pOut);. 
25110 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c   assert( rc!=SQL
25120 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d  ITE_OK || (pOut-
25130 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
25140 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
25150 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25160 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25170 20 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70   );.  p->apCsr[p
25180 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74  Op->p3]->cacheSt
25190 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
251a0 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
251b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
251c0 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
251d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
251e0 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
251f0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
25200 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
25210 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
25220 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
25230 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
25240 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
25250 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
25260 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
25270 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
25280 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
25290 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
252a0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
252b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
252c0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
252d0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
252e0 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
252f0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
25300 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
25310 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
25320 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
25330 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
25340 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
25350 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57  [P2]=key.**.** W
25360 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
25370 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
25380 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
25390 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
253a0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
253b0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
253c0 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
253d0 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
253e0 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
253f0 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
25400 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
25410 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
25420 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
25430 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
25440 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
25450 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
25460 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
25470 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
25480 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
25490 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
254a0 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
254b0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
254c0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
254d0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
254e0 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
254f0 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
25500 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
25510 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
25520 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
25530 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
25540 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
25550 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
25560 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
25570 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
25580 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25590 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
255a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
255b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
255c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
255d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
255e0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
255f0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
25600 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
25610 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
25620 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
25630 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
25640 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
25650 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
25660 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 || pOp->opco
25670 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
25680 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25690 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
256a0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
256b0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
256c0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
256d0 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65  ursor;..  /* The
256e0 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f   OP_RowKey and O
256f0 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
25700 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
25710 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
25720 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f    ** OP_Rewind/O
25730 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
25740 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
25750 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  uctions that mig
25760 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20  ht invalidate.  
25770 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  ** the cursor.  
25780 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f  If this where no
25790 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f  t the case, on o
257a0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
257b0 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77  assert()s.  ** w
257c0 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75  ould fail.  Shou
257d0 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61  ld this ever cha
257e0 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20  nge (because of 
257f0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63  changes in the c
25800 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74  ode.  ** generat
25810 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78  or) then the fix
25820 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73   would be to ins
25830 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20  ert a call to.  
25840 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ** sqlite3VdbeCu
25850 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20  rsorMoveto()..  
25860 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
25870 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25880 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25890 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
258a0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
258b0 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f   );.#if 0  /* No
258c0 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74  t required due t
258d0 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  o the previous t
258e0 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  o assert() state
258f0 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20  ments */.  rc = 
25900 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
25910 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
25920 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
25930 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
25940 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
25950 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
25960 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
25970 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
25980 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f  able );.    VVA_
25990 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
259a0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
259b0 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
259c0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
259d0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
259e0 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
259f0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
25a00 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
25a10 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
25a20 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
25a30 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
25a40 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
25a50 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
25a60 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
25a70 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
25a80 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
25a90 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
25aa0 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
25ab0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
25ac0 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
25ad0 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
25ae0 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
25af0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
25b00 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
25b10 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
25b20 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
25b30 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d  }.  testcase( n=
25b40 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  =0 );.  if( sqli
25b50 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
25b60 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d  ndResize(pOut, M
25b70 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20  AX(n,32)) ){.   
25b80 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
25b90 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
25ba0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
25bb0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
25bc0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  );.  if( pC->isT
25bd0 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72  able==0 ){.    r
25be0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25bf0 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
25c00 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
25c10 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
25c20 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
25c30 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
25c40 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
25c50 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
25c60 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
25c70 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
25c80 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
25c90 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
25ca0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
25cb0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
25cc0 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
25cd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25ce0 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
25cf0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
25d00 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
25d10 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
25d20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
25d30 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
25d40 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
25d50 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
25d60 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
25d70 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
25d80 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
25d90 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
25da0 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
25db0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
25dc0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
25dd0 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
25de0 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
25df0 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
25e00 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
25e10 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
25e20 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
25e30 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
25e40 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
25e50 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
25e60 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
25e70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
25e80 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
25e90 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
25ea0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
25eb0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
25ec0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
25ed0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
25ee0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25ef0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25f00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25f10 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25f20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25f30 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25f40 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
25f50 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53  Type!=CURTYPE_PS
25f60 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  EUDO || pC->null
25f70 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  Row );.  if( pC-
25f80 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
25f90 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
25fa0 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
25fb0 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
25fc0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25fd0 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
25fe0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
25ff0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26000 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
26010 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
26020 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
26030 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73  E_VTAB ){.    as
26040 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43  sert( pC->uc.pVC
26050 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74  ur!=0 );.    pVt
26060 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75  ab = pC->uc.pVCu
26070 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d  r->pVtab;.    pM
26080 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
26090 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65  Module;.    asse
260a0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
260b0 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  wid );.    rc = 
260c0 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
260d0 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76  pC->uc.pVCur, &v
260e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
260f0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
26100 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
26110 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
26120 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
26130 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
26140 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26150 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
26160 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26170 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
26180 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
26190 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
261a0 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20  estore(pC);.    
261b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
261c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
261d0 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
261e0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
261f0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
26200 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65  _Null;.      bre
26210 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  ak;.    }.    rc
26220 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
26230 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43  eySize(pC->uc.pC
26240 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
26250 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
26260 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77  TE_OK );  /* Alw
26270 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f  ays so because o
26280 66 20 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  f CursorRestore(
26290 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 7d 0a 20  ) above */.  }. 
262a0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
262b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
262c0 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50  pcode: NullRow P
262d0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
262e0 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  Move the cursor 
262f0 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77  P1 to a null row
26300 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e  .  Any OP_Column
26310 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74   operations.** t
26320 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  hat occur while 
26330 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e  the cursor is on
26340 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69   the null row wi
26350 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69  ll always.** wri
26360 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  te a NULL..*/.ca
26370 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b  se OP_NullRow: {
26380 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26390 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
263a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
263b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
263c0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
263d0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
263e0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
263f0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
26400 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
26410 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
26420 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75  E;.  if( pC->eCu
26430 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26440 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65  TREE ){.    asse
26450 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
26460 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  or!=0 );.    sql
26470 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75  ite3BtreeClearCu
26480 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72  rsor(pC->uc.pCur
26490 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  sor);.  }.  brea
264a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
264b0 20 4c 61 73 74 20 50 31 20 50 32 20 50 33 20 2a   Last P1 P2 P3 *
264c0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
264d0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
264e0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
264f0 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
26500 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
26510 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61   refer to the la
26520 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
26530 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
26540 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
26550 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
26560 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
26570 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
26580 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
26590 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
265a0 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
265b0 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
265c0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
265d0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
265e0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
265f0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
26600 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
26610 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
26620 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
26630 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
26640 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
26650 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
26660 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
26670 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
26680 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
26690 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
266a0 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20  t Next..*/.case 
266b0 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
266c0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
266d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
266e0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
266f0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
26700 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26710 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26720 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
26730 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26740 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26750 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
26760 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
26770 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
26780 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
26790 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65  uc.pCursor;.  re
267a0 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
267b0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
267c0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
267d0 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  Last(pCrsr, &res
267e0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
267f0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
26800 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26810 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
26820 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
26830 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65  STALE;.  pC->see
26840 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70  kResult = pOp->p
26850 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  3;.#ifdef SQLITE
26860 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
26870 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23  kOp = OP_Last;.#
26880 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
26890 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62  >p2>0 ){.    Vdb
268a0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
268b0 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
268c0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
268d0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
268e0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
268f0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
26900 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
26910 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
26920 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
26930 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
26940 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
26950 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
26960 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
26970 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
26980 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
26990 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
269a0 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
269b0 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
269c0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
269d0 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
269e0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
269f0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
26a00 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
26a10 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
26a20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
26a30 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
26a40 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
26a50 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
26a60 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
26a70 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
26a80 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
26a90 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
26aa0 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
26ab0 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
26ac0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
26ad0 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
26ae0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
26af0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
26b00 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
26b10 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
26b20 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
26b30 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
26b40 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
26b50 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
26b60 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
26b70 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
26b80 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
26b90 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
26ba0 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
26bb0 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
26bc0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
26bd0 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
26be0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
26bf0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
26c00 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
26c10 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
26c20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
26c30 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
26c40 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
26c50 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
26c60 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
26c70 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
26c80 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
26c90 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
26ca0 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
26cb0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
26cc0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
26cd0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
26ce0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
26cf0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
26d00 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
26d10 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
26d20 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
26d30 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
26d40 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
26d50 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
26d60 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
26d70 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
26d80 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
26d90 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
26da0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
26db0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
26dc0 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
26dd0 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
26de0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
26df0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
26e00 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
26e10 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
26e20 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
26e30 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26e40 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26e50 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26e60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26e70 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
26e80 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
26e90 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
26ea0 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
26eb0 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
26ec0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26ed0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
26ee0 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
26ef0 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
26f00 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
26f10 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26f20 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
26f30 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
26f40 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
26f50 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
26f60 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
26f70 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
26f80 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
26f90 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
26fa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26fb0 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
26fc0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
26fd0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
26fe0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
26ff0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27000 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e  ALE;.  }.  pC->n
27010 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
27020 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27030 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
27040 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62  <p->nOp );.  Vdb
27050 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
27060 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
27070 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
27080 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
27090 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
270a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
270b0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
270c0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
270d0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
270e0 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
270f0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
27100 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
27110 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
27120 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
27130 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
27140 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
27150 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
27160 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
27170 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
27180 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
27190 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
271a0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
271b0 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
271c0 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
271d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
271e0 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
271f0 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
27200 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
27210 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
27220 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
27230 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
27240 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
27250 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
27260 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
27270 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
27280 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
27290 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
272a0 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
272b0 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
272c0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
272d0 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
272e0 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
272f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
27300 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
27310 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
27320 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
27330 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
27340 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
27350 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
27360 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
27370 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
27380 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
27390 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
273a0 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
273b0 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
273c0 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
273d0 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
273e0 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
273f0 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
27400 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
27410 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
27420 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
27430 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
27440 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
27450 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
27460 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
27470 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
27480 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
27490 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
274a0 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
274b0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
274c0 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49  lso: Prev, NextI
274d0 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  fOpen.*/./* Opco
274e0 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50  de: NextIfOpen P
274f0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
27500 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
27510 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
27520 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
27530 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
27540 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
27550 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
27560 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
27570 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
27580 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
27590 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
275a0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
275b0 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
275c0 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
275d0 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
275e0 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
275f0 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
27600 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
27610 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
27620 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
27630 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
27640 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
27650 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
27660 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
27670 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
27680 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
27690 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
276a0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
276b0 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
276c0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
276d0 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
276e0 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
276f0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
27700 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
27710 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
27720 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
27730 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
27740 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
27750 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
27760 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
27770 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
27780 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
27790 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
277a0 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
277b0 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
277c0 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
277d0 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
277e0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
277f0 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
27800 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
27810 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
27820 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
27830 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
27840 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
27850 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
27860 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
27870 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
27880 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
27890 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
278a0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
278b0 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
278c0 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
278d0 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
278e0 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
278f0 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
27900 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
27910 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
27920 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
27930 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
27940 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
27950 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
27960 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
27970 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
27980 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
27990 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
279a0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
279b0 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
279c0 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74  like Prev except
279d0 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
279e0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
279f0 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
27a00 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
27a10 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
27a20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
27a30 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
27a40 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20  nt res;..  pC = 
27a50 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27a60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
27a70 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
27a80 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
27a90 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
27aa0 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
27ab0 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f  s);.  goto next_
27ac0 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72  tail;.case OP_Pr
27ad0 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  evIfOpen:    /* 
27ae0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
27af0 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f  NextIfOpen:    /
27b00 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
27b10 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27b20 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ]==0 ) break;.  
27b30 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
27b40 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
27b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
27b60 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
27b70 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
27b80 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
27b90 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27ba0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27bb0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
27bc0 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
27bd0 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
27be0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27bf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73  [pOp->p1];.  res
27c00 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
27c10 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27c20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
27c30 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27c40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27c50 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
27c60 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
27c70 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28  ert( res==0 || (
27c80 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73  res==1 && pC->is
27c90 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74  Table==0) );.  t
27ca0 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20  estcase( res==1 
27cb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27cc0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
27cd0 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  t || pOp->p4.xAd
27ce0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
27cf0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
27d00 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27d10 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
27d20 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
27d30 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
27d40 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ous );.  assert(
27d50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
27d60 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70  _NextIfOpen || p
27d70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
27d80 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
27d90 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
27da0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
27db0 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  revIfOpen || pOp
27dc0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
27dd0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
27de0 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ous);..  /* The 
27df0 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
27e00 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
27e10 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61  eekGT, SeekGE, a
27e20 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20  nd Rewind..  ** 
27e30 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
27e40 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
27e50 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  er SeekLT, SeekL
27e60 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a  E, and Last. */.
27e70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
27e80 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
27e90 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
27ea0 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20  P_NextIfOpen.   
27eb0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
27ec0 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  p==OP_SeekGT || 
27ed0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
27ee0 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekGE.       || 
27ef0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52  pC->seekOp==OP_R
27f00 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65  ewind || pC->see
27f10 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a  kOp==OP_Found);.
27f20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
27f30 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
27f40 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
27f50 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20  P_PrevIfOpen.   
27f60 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
27f70 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  p==OP_SeekLT || 
27f80 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
27f90 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekLE.       || 
27fa0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c  pC->seekOp==OP_L
27fb0 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70  ast );..  rc = p
27fc0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28  Op->p4.xAdvance(
27fd0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
27fe0 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  &res);.next_tail
27ff0 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
28000 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
28010 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
28020 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a  aken(res==0,2);.
28030 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
28040 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
28050 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75  = 0;.    p->aCou
28060 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b  nter[pOp->p5]++;
28070 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
28080 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
28090 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
280a0 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20  #endif.    goto 
280b0 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
280c0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
280d0 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
280e0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
280f0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
28100 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
28110 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28120 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20  IdxInsert P1 P2 
28130 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  P3 * P5.** Synop
28140 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
28150 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
28160 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
28170 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
28180 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
28190 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
281a0 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
281b0 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
281c0 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
281d0 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
281e0 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
281f0 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20  ..**.** P3 is a 
28200 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64  flag that provid
28210 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  es a hint to the
28220 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68   b-tree layer th
28230 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72  at this.** inser
28240 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  t is likely to b
28250 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a  e an append..**.
28260 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
28270 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
28280 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
28290 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
282a0 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
282b0 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
282c0 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  uction.  If the 
282d0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
282e0 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20  it is clear,.** 
282f0 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
28300 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61  counter is uncha
28310 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nged..**.** If P
28320 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
28330 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62  _USESEEKRESULT b
28340 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
28350 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
28360 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61  e.** just done a
28370 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f   seek to the spo
28380 74 20 77 68 65 72 65 20 74 68 65 20 6e 65 77 20  t where the new 
28390 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65 20 69  entry is to be i
283a0 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73  nserted..** This
283b0 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69   flag avoids doi
283c0 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b  ng an extra seek
283d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
283e0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
283f0 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
28400 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
28410 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
28420 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
28430 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65  _Insert..*/.case
28440 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
28450 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
28460 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
28470 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
28480 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
28490 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
284a0 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68  nKey;.  const ch
284b0 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73  ar *zKey;..  ass
284c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
284d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
284e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
284f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
28500 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28510 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28520 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
28530 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
28540 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
28550 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
28560 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
28570 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
28580 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69   MEM_Blob );.  i
28590 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
285a0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
285b0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
285c0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
285d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
285e0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
285f0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
28600 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
28610 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
28620 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
28630 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
28640 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
28650 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
28660 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
28670 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 20 20 72  nsert ){.      r
28680 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
28690 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
286a0 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  In2);.    }else{
286b0 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49  .      nKey = pI
286c0 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65  n2->n;.      zKe
286d0 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
286e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
286f0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
28700 63 2e 70 43 75 72 73 6f 72 2c 20 7a 4b 65 79 2c  c.pCursor, zKey,
28710 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
28720 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
28730 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
28740 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
28750 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
28760 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
28770 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
28780 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
28790 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
287a0 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
287b0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
287c0 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
287d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
287e0 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
287f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
28800 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
28810 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
28820 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
28830 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
28840 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
28850 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
28860 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
28870 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
28880 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
28890 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
288a0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
288b0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
288c0 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
288d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
288e0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
288f0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
28900 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
28910 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
28920 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
28930 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
28940 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
28950 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
28960 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
28970 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
28980 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
28990 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
289a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
289b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
289c0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
289d0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
289e0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
289f0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
28a00 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
28a10 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
28a20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28a30 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b  >p5==0 );.  r.pK
28a40 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
28a50 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c  yInfo;.  r.nFiel
28a60 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33  d = (u16)pOp->p3
28a70 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63  ;.  r.default_rc
28a80 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d   = 0;.  r.aMem =
28a90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
28aa0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
28ab0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
28ac0 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c  ed(pCrsr, &r, 0,
28ad0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
28ae0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
28af0 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
28b00 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28b10 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42  eDelete(pCrsr, B
28b20 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b  TREE_AUXDELETE);
28b30 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
28b40 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
28b50 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61  o==0 );.  pC->ca
28b60 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
28b70 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
28b80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28b90 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20  Seek P1 * P3 P4 
28ba0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
28bb0 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f  Move P3 to P1.ro
28bc0 77 69 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  wid.**.** P1 is 
28bd0 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75  an open index cu
28be0 72 73 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61  rsor and P3 is a
28bf0 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63   cursor on the c
28c00 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
28c10 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63  table.  This opc
28c20 6f 64 65 20 64 6f 65 73 20 61 20 64 65 66 65 72  ode does a defer
28c30 72 65 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20  red seek of the 
28c40 50 33 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a  P3 table cursor.
28c50 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68  ** to the row th
28c60 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
28c70 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  o the current ro
28c80 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  w of P1..**.** T
28c90 68 69 73 20 69 73 20 61 20 64 65 66 65 72 72 65  his is a deferre
28ca0 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
28cb0 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
28cc0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
28cd0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
28ce0 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
28cf0 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
28d00 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
28d10 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
28d20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a  I/O happens..**.
28d30 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20  ** P4 may be an 
28d40 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
28d50 73 20 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52  s (type P4_INTAR
28d60 52 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  RAY) containing.
28d70 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72  ** one entry for
28d80 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
28d90 74 68 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49  the P3 table.  I
28da0 66 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 28  f array entry a(
28db0 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72  i).** is non-zer
28dc0 6f 2c 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20  o, then reading 
28dd0 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72  column a(i)-1 fr
28de0 6f 6d 20 63 75 72 73 6f 72 20 50 33 20 69 73 20  om cursor P3 is 
28df0 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74  .** equivalent t
28e00 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65  o performing the
28e10 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 61   deferred seek a
28e20 6e 64 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20  nd then reading 
28e30 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f  column i .** fro
28e40 6d 20 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f  m P1.  This info
28e50 72 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  rmation is store
28e60 64 20 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64  d in P3 and used
28e70 20 74 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20   to redirect.** 
28e80 72 65 61 64 73 20 61 67 61 69 6e 73 74 20 50 33  reads against P3
28e90 20 6f 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75   over to P1, thu
28ea0 73 20 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64  s possibly avoid
28eb0 69 6e 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a  ing the need to.
28ec0 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64  ** seek and read
28ed0 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f   cursor P3..*/./
28ee0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
28ef0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
28f00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
28f10 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72  ]=rowid.**.** Wr
28f20 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
28f30 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
28f40 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
28f50 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
28f60 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
28f70 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
28f80 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
28f90 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
28fa0 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
28fb0 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
28fc0 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
28fd0 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
28fe0 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
28ff0 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
29000 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
29010 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
29020 73 65 20 4f 50 5f 53 65 65 6b 3a 0a 63 61 73 65  se OP_Seek:.case
29030 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29050 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
29060 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
29070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
29080 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  P1 index cursor 
29090 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
290a0 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20  *pTabCur;       
290b0 20 20 20 20 2f 2a 20 54 68 65 20 50 32 20 74 61      /* The P2 ta
290c0 62 6c 65 20 63 75 72 73 6f 72 20 28 4f 50 5f 53  ble cursor (OP_S
290d0 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69  eek only) */.  i
290e0 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20  64 rowid;       
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
29100 20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63   Rowid that P1 c
29110 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f  urrent points to
29120 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
29130 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29140 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
29150 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29160 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29170 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
29180 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29190 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
291a0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
291b0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
291c0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
291d0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
291e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
291f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29200 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
29210 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c   !pC->nullRow ||
29220 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
29230 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20  _IdxRowid );..  
29240 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20  /* The IdxRowid 
29250 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73  and Seek opcodes
29260 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65   are combined be
29270 63 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d  cause of the com
29280 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66  monality.  ** of
29290 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
292a0 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20  orRestore() and 
292b0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
292c0 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d  wid(). */.  rc =
292d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
292e0 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a  orRestore(pC);..
292f0 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43    /* sqlite3VbeC
29300 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63  ursorRestore() c
29310 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20  an only fail if 
29320 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62  the record has b
29330 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a  een deleted.  **
29340 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20   out from under 
29350 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61  the cursor.  Tha
29360 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70  t will never hap
29370 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52  pens for an IdxR
29380 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65  owid.  ** or See
29390 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66  k opcode */.  if
293a0 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
293b0 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
293c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
293d0 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  ;..  if( !pC->nu
293e0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77  llRow ){.    row
293f0 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  id = 0;  /* Not 
29400 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
29410 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
29420 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
29430 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
29440 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d  IdxRowid(db, pC-
29450 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f  >uc.pCursor, &ro
29460 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
29470 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
29480 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
29490 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
294a0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d    }.    if( pOp-
294b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
294c0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
294d0 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20  ( pOp->p3>=0 && 
294e0 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73  pOp->p3<p->nCurs
294f0 6f 72 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62  or );.      pTab
29500 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
29510 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61  Op->p3];.      a
29520 73 73 65 72 74 28 20 70 54 61 62 43 75 72 21 3d  ssert( pTabCur!=
29530 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
29540 74 28 20 70 54 61 62 43 75 72 2d 3e 65 43 75 72  t( pTabCur->eCur
29550 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
29560 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73  REE );.      ass
29570 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 75 63  ert( pTabCur->uc
29580 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
29590 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
295a0 62 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b  bCur->isTable );
295b0 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
295c0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
295d0 20 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65     pTabCur->move
295e0 74 6f 54 61 72 67 65 74 20 3d 20 72 6f 77 69 64  toTarget = rowid
295f0 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
29600 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
29610 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = 1;.      asser
29620 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
29630 50 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20 70  P4_INTARRAY || p
29640 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a  Op->p4.ai==0 );.
29650 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 61        pTabCur->a
29660 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34  AltMap = pOp->p4
29670 2e 61 69 3b 0a 20 20 20 20 20 20 70 54 61 62 43  .ai;.      pTabC
29680 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d  ur->pAltCursor =
29690 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   pC;.    }else{.
296a0 20 20 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74        pOut = out
296b0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
296c0 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  Op);.      pOut-
296d0 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20  >u.i = rowid;.  
296e0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
296f0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
29700 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
29710 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29720 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29  e==OP_IdxRowid )
29730 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
29740 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65  eMemSetNull(&aMe
29750 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d  m[pOp->p2]);.  }
29760 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
29770 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31  Opcode: IdxGE P1
29780 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
29790 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
297a0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
297b0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
297c0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
297d0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
297e0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
297f0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
29800 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
29810 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
29820 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
29830 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
29840 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
29850 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
29860 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
29870 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
29880 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
29890 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
298a0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
298b0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
298c0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
298d0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
298e0 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
298f0 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
29900 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
29910 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
29920 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
29930 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50  e: IdxGT P1 P2 P
29940 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
29950 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
29960 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
29970 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
29980 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
29990 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
299a0 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
299b0 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
299c0 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
299d0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
299e0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
299f0 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
29a00 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
29a10 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
29a20 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
29a30 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
29a40 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
29a50 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
29a60 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
29a70 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
29a80 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
29a90 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
29aa0 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
29ab0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
29ac0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
29ad0 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
29ae0 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33  : IdxLT P1 P2 P3
29af0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
29b00 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
29b10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
29b20 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
29b30 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
29b40 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
29b50 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
29b60 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
29b70 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
29b80 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
29b90 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
29ba0 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
29bb0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
29bc0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
29bd0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
29be0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
29bf0 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
29c00 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
29c10 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
29c20 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
29c30 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
29c40 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
29c50 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61  .** Otherwise fa
29c60 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
29c70 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
29c80 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
29c90 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33  : IdxLE P1 P2 P3
29ca0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
29cb0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
29cc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
29cd0 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
29ce0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
29cf0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
29d00 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
29d10 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
29d20 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
29d30 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
29d40 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
29d50 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
29d60 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
29d70 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
29d80 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
29d90 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
29da0 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
29db0 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
29dc0 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
29dd0 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
29de0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
29df0 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
29e00 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
29e10 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
29e20 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
29e30 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
29e40 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45  */.case OP_IdxLE
29e50 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
29e60 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
29e70 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xGT:          /*
29e80 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
29e90 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20  _IdxLT:         
29ea0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
29eb0 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20   OP_IdxGE:  {   
29ec0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
29ed0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
29ee0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
29ef0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
29f00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29f10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
29f20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
29f30 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
29f40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
29f50 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
29f60 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
29f70 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
29f80 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
29f90 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
29fa0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
29fb0 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20  .pCursor!=0);.  
29fc0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
29fd0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
29fe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29ff0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
2a000 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
2a010 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2a020 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b  _INT32 );.  r.pK
2a030 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
2a040 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c  yInfo;.  r.nFiel
2a050 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
2a060 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  .i;.  if( pOp->o
2a070 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29  pcode<OP_IdxLT )
2a080 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2a090 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2a0a0 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xLE || pOp->opco
2a0b0 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
2a0c0 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
2a0d0 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
2a0e0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2a0f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2a100 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2a110 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2a120 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2a130 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d   0;.  }.  r.aMem
2a140 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2a150 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
2a160 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69  _DEBUG.  { int i
2a170 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
2a180 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
2a190 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
2a1a0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
2a1b0 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30  #endif.  res = 0
2a1c0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2a1d0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
2a1e0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2a1f0 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  g. */.  rc = sql
2a200 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f  ite3VdbeIdxKeyCo
2a210 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72  mpare(db, pC, &r
2a220 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
2a230 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d  t( (OP_IdxLE&1)=
2a240 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26  =(OP_IdxLT&1) &&
2a250 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28   (OP_IdxGE&1)==(
2a260 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20  OP_IdxGT&1) );. 
2a270 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64   if( (pOp->opcod
2a280 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26  e&1)==(OP_IdxLT&
2a290 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  1) ){.    assert
2a2a0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2a2b0 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxLE || pOp->
2a2c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
2a2d0 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72   );.    res = -r
2a2e0 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  es;.  }else{.   
2a2f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2a300 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2a310 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2a320 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
2a330 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65  es++;.  }.  Vdbe
2a340 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e  BranchTaken(res>
2a350 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3e  0,2);.  if( res>
2a360 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
2a370 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2a380 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
2a390 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
2a3a0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
2a3b0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2a3c0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2a3d0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
2a3e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
2a3f0 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
2a400 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
2a410 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
2a420 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
2a430 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2a440 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
2a450 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
2a460 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2a470 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2a480 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2a490 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2a4a0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2a4b0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2a4c0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2a4d0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2a4e0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
2a4f0 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
2a500 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
2a510 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
2a520 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
2a530 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
2a540 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
2a550 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
2a560 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
2a570 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
2a580 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
2a590 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
2a5a0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
2a5b0 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
2a5c0 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
2a5d0 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
2a5e0 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
2a5f0 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
2a600 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
2a610 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
2a620 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20   If no page .** 
2a630 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
2a640 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
2a650 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
2a660 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61  ropped was alrea
2a670 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20  dy .** the last 
2a680 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
2a690 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f  ase) then a zero
2a6a0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2a6b0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66  gister P2..** If
2a6c0 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64   AUTOVACUUM is d
2a6d0 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a  isabled then a z
2a6e0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
2a6f0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2a700 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
2a710 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
2a720 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
2a730 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69   out2 */.  int i
2a740 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62  Moved;.  int iDb
2a750 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
2a760 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2a770 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2a780 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >1 );.  pOut = o
2a790 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2a7a0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
2a7b0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2a7c0 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  .  if( db->nVdbe
2a7d0 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73  Read > db->nVDes
2a7e0 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63  troy+1 ){.    rc
2a7f0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
2a800 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
2a810 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
2a820 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
2a830 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
2a840 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2a850 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2a860 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d  , iDb) );.    iM
2a870 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  oved = 0;  /* No
2a880 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2a890 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2a8a0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2a8b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
2a8c0 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
2a8d0 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
2a8e0 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
2a8f0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2a900 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
2a910 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
2a920 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a930 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
2a940 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2a950 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d  E_OK && iMoved!=
2a960 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2a970 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2a980 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
2a990 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
2a9a0 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
2a9b0 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
2a9c0 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
2a9d0 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
2a9e0 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
2a9f0 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
2aa00 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2aa10 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
2aa20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
2aa30 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
2aa40 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2aa50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2aa60 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
2aa70 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
2aa80 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2aa90 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2aaa0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2aab0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
2aac0 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
2aad0 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
2aae0 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
2aaf0 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
2ab00 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
2ab10 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2ab20 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
2ab30 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2ab40 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2ab50 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
2ab60 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2ab70 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
2ab80 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
2ab90 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2aba0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2abb0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2abc0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2abd0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2abe0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2abf0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2ac00 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2ac10 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
2ac20 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2ac30 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
2ac40 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
2ac50 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
2ac60 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
2ac70 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
2ac80 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
2ac90 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
2aca0 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
2acb0 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2acc0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2acd0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2ace0 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
2acf0 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
2ad00 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
2ad10 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
2ad20 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
2ad30 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
2ad40 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2ad50 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2ad60 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2ad70 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
2ad80 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
2ad90 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
2ada0 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
2adb0 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
2adc0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2add0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2ade0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2adf0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2ae00 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2ae10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2ae20 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2ae30 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2ae40 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2ae50 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2ae60 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2ae70 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2ae80 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2ae90 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2aea0 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2aeb0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2aec0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2aed0 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2aee0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2aef0 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2af00 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2af10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2af20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2af30 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2af40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2af50 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2af60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2af70 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2af80 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2af90 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2afa0 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2afb0 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2afc0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2afd0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2afe0 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2aff0 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2b000 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2b010 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2b020 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2b030 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2b040 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2b050 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2b060 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2b070 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2b080 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2b090 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2b0a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2b0b0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2b0c0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2b0d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2b0e0 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2b0f0 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2b100 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2b110 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2b120 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2b130 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2b140 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2b150 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b160 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2b170 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2b180 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
2b190 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b1a0 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
2b1b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2b1c0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2b1d0 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a  root iDb=P1.**.*
2b1e0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
2b1f0 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61   table in the ma
2b200 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2b210 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
2b220 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
2b230 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2b240 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
2b250 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2b260 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
2b270 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
2b280 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
2b290 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
2b2a0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a  .** register P2.
2b2b0 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
2b2c0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74  ence between a t
2b2d0 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65  able and an inde
2b2e0 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61  x is this:  A ta
2b2f0 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  ble must.** have
2b300 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65   a 4-byte intege
2b310 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61  r key and can ha
2b320 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74  ve arbitrary dat
2b330 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20  a.  An index.** 
2b340 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79  has an arbitrary
2b350 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61   key but no data
2b360 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2b370 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f  : CreateIndex.*/
2b380 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
2b390 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20  teIndex P1 P2 * 
2b3a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2b3b0 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2b3c0 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
2b3d0 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
2b3e0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2b3f0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
2b400 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
2b410 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2b420 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
2b430 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
2b440 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
2b450 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
2b460 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2b470 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
2b480 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
2b490 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
2b4a0 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
2b4b0 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  on OP_CreateTabl
2b4c0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
2b4d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
2b4e0 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49  .case OP_CreateI
2b4f0 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20  ndex:           
2b500 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65   /* out2 */.case
2b510 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
2b520 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
2b530 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ut2 */.  int pgn
2b540 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  o;.  int flags;.
2b550 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f    Db *pDb;..  pO
2b560 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2b570 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2b580 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  gno = 0;.  asser
2b590 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2b5a0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2b5b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2b5c0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2b5d0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
2b5e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2b5f0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2b600 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
2b610 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2b620 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
2b630 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
2b640 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54  code==OP_CreateT
2b650 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66  able ){.    /* f
2b660 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
2b670 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67  KEY; */.    flag
2b680 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
2b690 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
2b6a0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f  lags = BTREE_BLO
2b6b0 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  BKEY;.  }.  rc =
2b6c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
2b6d0 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
2b6e0 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29  t, &pgno, flags)
2b6f0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
2b700 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pgno;.  break;.}
2b710 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
2b720 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
2b730 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
2b740 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
2b750 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
2b760 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
2b770 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
2b780 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
2b790 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2b7a0 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4. .**.** This
2b7b0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2b7c0 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
2b7d0 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
2b7e0 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
2b7f0 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
2b800 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2b810 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
2b820 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
2b830 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
2b840 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
2b850 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
2b860 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
2b870 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
2b880 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
2b890 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70  ;..  /* Any prep
2b8a0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74  ared statement t
2b8b0 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  hat invokes this
2b8c0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c   opcode will hol
2b8d0 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f  d mutexes.  ** o
2b8e0 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20  n every btree.  
2b8f0 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71  This is a prereq
2b900 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b  uisite for invok
2b910 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  ing .  ** sqlite
2b920 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e  3InitCallback().
2b930 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
2b940 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
2b950 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e  iDb=0; iDb<db->n
2b960 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
2b970 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c  assert( iDb==1 |
2b980 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  | sqlite3BtreeHo
2b990 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
2b9a0 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
2b9b0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20  }.#endif..  iDb 
2b9c0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
2b9d0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
2b9e0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
2b9f0 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f  assert( DbHasPro
2ba00 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
2ba10 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
2ba20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20  );.  /* Used to 
2ba30 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  be a conditional
2ba40 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65   */ {.    zMaste
2ba50 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
2ba60 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44  (iDb);.    initD
2ba70 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
2ba80 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
2ba90 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
2baa0 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
2bab0 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
2bac0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
2bad0 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
2bae0 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
2baf0 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
2bb00 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
2bb10 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
2bb20 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
2bb30 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
2bb40 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70   zMaster, pOp->p
2bb50 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53  4.z);.    if( zS
2bb60 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ql==0 ){.      r
2bb70 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
2bb80 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2bb90 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
2bba0 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
2bbb0 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2bbc0 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
2bbd0 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
2bbe0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
2bbf0 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
2bc00 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
2bc10 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2bc20 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
2bc30 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
2bc40 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
2bc50 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2bc60 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
2bc70 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
2bc80 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2bc90 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
2bca0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2bcb0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
2bcc0 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33  if( rc ) sqlite3
2bcd0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
2bce0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
2bcf0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2bd00 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
2bd10 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2bd20 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
2bd30 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2bd40 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
2bd50 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
2bd60 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
2bd70 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
2bd80 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
2bd90 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
2bda0 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
2bdb0 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
2bdc0 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
2bdd0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
2bde0 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
2bdf0 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
2be00 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
2be10 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
2be20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
2be30 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
2be40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
2be50 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
2be60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2be70 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2be80 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
2be90 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2bea0 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
2beb0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
2bec0 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
2bed0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2bee0 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
2bef0 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
2bf00 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2bf10 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2bf20 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2bf30 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2bf40 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2bf50 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
2bf60 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2bf70 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2bf80 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
2bf90 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
2bfa0 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2bfb0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2bfc0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2bfd0 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2bfe0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2bff0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2c000 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2c010 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2c020 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2c030 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
2c040 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2c050 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
2c060 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2c070 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2c080 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2c090 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
2c0a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2c0b0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2c0c0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2c0d0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2c0e0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2c0f0 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
2c100 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2c110 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2c120 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
2c130 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2c140 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2c150 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2c160 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
2c170 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
2c180 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2c190 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2c1a0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2c1b0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2c1c0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2c1d0 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
2c1e0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2c1f0 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
2c200 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2c210 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2c220 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
2c230 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
2c240 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2c250 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2c260 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2c270 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2c280 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
2c290 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
2c2a0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2c2b0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2c2c0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
2c2d0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2c2e0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2c2f0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2c300 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2c310 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2c320 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2c330 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2c340 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2c350 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2c360 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2c370 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
2c380 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2c390 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
2c3a0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2c3b0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2c3c0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2c3d0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2c3e0 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
2c3f0 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
2c400 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
2c410 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
2c420 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
2c430 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
2c440 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
2c450 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
2c460 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
2c470 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
2c480 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
2c490 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
2c4a0 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
2c4b0 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
2c4c0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2c4d0 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
2c4e0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78  contains the max
2c4f0 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
2c500 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a  llowed errors..*
2c510 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33  * At most reg(P3
2c520 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65  ) errors will be
2c530 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e   reported..** In
2c540 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2c550 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73  e analysis stops
2c560 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28   as soon as reg(
2c570 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a  P1) errors are .
2c580 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31  ** seen.  Reg(P1
2c590 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ) is updated wit
2c5a0 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
2c5b0 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
2c5c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ..**.** The root
2c5d0 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66   page numbers of
2c5e0 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74   all tables in t
2c5f0 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
2c600 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65  integer.** store
2c610 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65  d in reg(P1), re
2c620 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b  g(P1+1), reg(P1+
2c630 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20  2), ....  There 
2c640 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a  are P2 tables.**
2c650 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66   total..**.** If
2c660 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
2c670 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
2c680 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
2c690 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
2c6a0 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
2c6b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2c6c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2c6d0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
2c6e0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
2c6f0 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
2c700 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
2c710 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
2c720 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
2c730 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
2c740 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
2c750 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
2c760 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
2c770 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
2c780 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
2c790 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
2c7a0 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
2c7b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  ed */.  int j;  
2c7c0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
2c7d0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
2c7e0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
2c7f0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
2c800 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
2c810 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
2c820 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
2c830 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
2c840 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
2c850 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
2c860 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
2c870 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
2c880 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
2c890 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
2c8a0 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
2c8b0 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
2c8c0 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
2c8d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
2c8e0 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
2c8f0 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
2c900 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
2c910 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
2c920 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2c930 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
2c940 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
2c950 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
2c960 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2c970 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2c980 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2c990 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2c9a0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
2c9b0 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2c9c0 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
2c9d0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2c9e0 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  1];.  for(j=0; j
2c9f0 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20  <nRoot; j++){.  
2ca00 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e    aRoot[j] = (in
2ca10 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
2ca20 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b  Value(&pIn1[j]);
2ca30 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20  .  }.  aRoot[j] 
2ca40 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
2ca50 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
2ca60 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2ca70 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2ca80 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b  ask, pOp->p5) );
2ca90 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
2caa0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
2cab0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
2cac0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
2cad0 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caf0 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
2cb00 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
2cb10 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2cb20 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
2cb30 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
2cb40 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2cb50 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2cb60 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
2cb70 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
2cb80 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
2cb90 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
2cba0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
2cbb0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
2cbc0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
2cbd0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
2cbe0 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
2cbf0 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
2cc00 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2cc10 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
2cc20 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2cc30 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
2cc40 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2cc50 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2cc60 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2cc70 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
2cc80 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
2cc90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2cca0 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50  opsis:  rowset(P
2ccb0 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49  1)=r[P2].**.** I
2ccc0 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
2ccd0 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
2cce0 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
2ccf0 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78   a boolean index
2cd00 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
2cd10 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
2cd20 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
2cd30 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
2cd40 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
2cd50 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
2cd60 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
2cd70 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
2cd80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2cd90 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2cda0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2cdb0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
2cdc0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2cdd0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2cde0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2cdf0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2ce00 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2ce10 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2ce20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2ce30 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2ce40 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2ce50 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
2ce60 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2ce70 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32  >u.pRowSet, pIn2
2ce80 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
2ce90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2cea0 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
2ceb0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2cec0 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65  is:  r[P3]=rowse
2ced0 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2cee0 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2cef0 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2cf00 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2cf10 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2cf20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2cf30 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2cf40 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2cf50 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2cf60 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2cf70 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2cf80 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2cf90 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2cfa0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2cfb0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2cfc0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2cfd0 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2cfe0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2cff0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2d000 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2d010 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2d020 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2d030 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2d040 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2d050 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2d060 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2d070 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2d080 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2d090 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2d0a0 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f  ken(1,2);.    go
2d0b0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2d0c0 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2d0d0 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
2d0e0 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2d0f0 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2d100 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2d110 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2d120 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  0,2);.    sqlite
2d130 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2d140 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
2d150 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74   val);.  }.  got
2d160 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2d170 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2d180 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
2d190 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
2d1a0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
2d1b0 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
2d1c0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2d1d0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
2d1e0 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
2d1f0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
2d200 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
2d210 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
2d220 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
2d230 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
2d240 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
2d250 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
2d260 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
2d270 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
2d280 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
2d290 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
2d2a0 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
2d2b0 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
2d2c0 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
2d2d0 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
2d2e0 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
2d2f0 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
2d300 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
2d310 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
2d320 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
2d330 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
2d340 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2d350 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
2d360 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
2d370 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2d380 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2d390 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2d3a0 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2d3b0 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2d3c0 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
2d3d0 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
2d3e0 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
2d3f0 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
2d400 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
2d410 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
2d420 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
2d430 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
2d440 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
2d450 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
2d460 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
2d470 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2d480 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
2d490 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
2d4a0 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
2d4b0 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
2d4c0 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
2d4d0 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
2d4e0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2d4f0 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
2d500 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
2d510 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
2d520 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
2d530 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
2d540 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
2d550 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
2d560 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
2d570 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
2d580 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
2d590 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
2d5a0 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
2d5b0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
2d5c0 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
2d5d0 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
2d5e0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2d5f0 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
2d600 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
2d610 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d630 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2d640 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
2d650 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
2d660 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2d670 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2d680 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2d690 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
2d6a0 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
2d6b0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
2d6c0 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
2d6d0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
2d6e0 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
2d6f0 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2d700 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
2d710 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
2d720 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
2d730 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
2d740 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
2d750 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
2d760 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2d770 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2d780 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2d790 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2d7a0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2d7b0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2d7c0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2d7d0 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
2d7e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2d7f0 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
2d800 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
2d810 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
2d820 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
2d830 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
2d840 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
2d850 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
2d860 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
2d870 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
2d880 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
2d890 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f 74  if( exists ) got
2d8a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2d8b0 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
2d8c0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
2d8d0 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2d8e0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
2d8f0 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
2d900 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2d910 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2d920 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
2d930 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
2d940 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2d950 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
2d960 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
2d970 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
2d980 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
2d990 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
2d9a0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
2d9b0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
2d9c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
2d9d0 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
2d9e0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
2d9f0 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
2da00 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
2da10 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
2da20 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
2da30 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
2da40 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
2da50 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
2da60 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
2da70 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
2da80 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
2da90 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
2daa0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2dab0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
2dac0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
2dad0 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
2dae0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
2daf0 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
2db00 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
2db10 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
2db20 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
2db30 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
2db40 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2db50 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
2db60 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2db70 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
2db80 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2db90 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
2dba0 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
2dbb0 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
2dbc0 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2dbd0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2dbe0 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2dc00 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2dc10 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2dc20 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2dc30 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2dc40 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2dc50 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2dc60 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2dc70 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2dc80 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2dc90 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2dca0 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2dcb0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2dcc0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2dcd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2dce0 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2dcf0 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
2dd00 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
2dd10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2dd20 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
2dd30 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
2dd40 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2dd50 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
2dd60 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
2dd70 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
2dd80 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
2dd90 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
2dda0 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
2ddb0 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
2ddc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ddd0 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
2dde0 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
2ddf0 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
2de00 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
2de10 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
2de20 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2de30 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
2de40 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
2de50 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
2de60 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
2de70 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2de80 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
2de90 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
2dea0 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2deb0 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
2dec0 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
2ded0 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
2dee0 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
2def0 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
2df00 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
2df10 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
2df20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
2df30 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
2df40 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
2df50 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
2df60 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
2df70 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
2df80 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2df90 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
2dfa0 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
2dfb0 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2dfc0 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
2dfd0 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
2dfe0 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
2dff0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
2e000 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
2e010 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
2e020 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
2e030 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
2e040 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
2e050 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
2e060 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
2e070 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
2e080 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2e090 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
2e0a0 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
2e0b0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
2e0c0 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
2e0d0 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
2e0e0 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
2e0f0 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
2e100 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2e110 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
2e120 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2e130 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
2e140 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
2e150 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2e160 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
2e170 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
2e180 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
2e190 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
2e1a0 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
2e1b0 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
2e1c0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2e1d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2e1e0 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d  eError(p, "too m
2e1f0 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
2e200 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
2e210 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2e220 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
2e230 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
2e240 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
2e250 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
2e260 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
2e270 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2e280 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
2e290 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2e2a0 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
2e2b0 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
2e2c0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
2e2d0 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
2e2e0 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
2e2f0 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
2e300 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
2e310 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
2e320 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
2e330 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
2e340 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
2e350 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
2e360 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
2e370 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
2e380 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
2e390 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
2e3a0 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
2e3b0 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
2e3c0 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
2e3d0 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
2e3e0 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
2e3f0 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
2e400 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
2e410 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
2e420 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
2e430 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
2e440 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
2e450 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
2e460 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
2e470 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
2e480 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
2e490 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
2e4a0 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
2e4b0 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d  Csr;.    nByte =
2e4c0 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
2e4d0 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20  dbeFrame)).     
2e4e0 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20           + nMem 
2e4f0 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20  * sizeof(Mem).  
2e500 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
2e510 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73  rogram->nCsr * s
2e520 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2e530 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   *).            
2e540 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f    + pProgram->nO
2e550 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29  nce * sizeof(u8)
2e560 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
2e570 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
2e580 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
2e590 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
2e5a0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2e5b0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
2e5c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2e5d0 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
2e5e0 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
2e5f0 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
2e600 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
2e610 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
2e620 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
2e630 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
2e640 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2e650 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
2e660 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2e670 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69   pFrame->pc = (i
2e680 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
2e690 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
2e6a0 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
2e6b0 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
2e6c0 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
2e6d0 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
2e6e0 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
2e6f0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
2e700 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
2e710 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
2e720 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2e730 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
2e740 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
2e750 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2e760 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e  .    pFrame->aOn
2e770 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63  ceFlag = p->aOnc
2e780 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d  eFlag;.    pFram
2e790 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->nOnceFlag = p
2e7a0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66  ->nOnceFlag;.#if
2e7b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2e7c0 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
2e7d0 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e  S.    pFrame->an
2e7e0 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63  Exec = p->anExec
2e7f0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45  ;.#endif..    pE
2e800 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  nd = &VdbeFrameM
2e810 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d  em(pFrame)[pFram
2e820 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20  e->nChildMem];. 
2e830 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65     for(pMem=Vdbe
2e840 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2e850 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d  ; pMem!=pEnd; pM
2e860 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65  em++){.      pMe
2e870 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  m->flags = MEM_U
2e880 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20  ndefined;.      
2e890 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
2e8a0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2e8b0 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
2e8c0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
2e8d0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2e8e0 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
2e8f0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2e900 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
2e910 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2e920 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2e930 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
2e940 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70  ssert( (int)(pOp
2e950 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d   - aOp)==pFrame-
2e960 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
2e970 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
2e980 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
2e990 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
2e9a0 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
2e9b0 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
2e9c0 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
2e9d0 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72  ->nChange;.  pFr
2e9e0 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d  ame->nDbChange =
2e9f0 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b   p->db->nChange;
2ea00 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
2ea10 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
2ea20 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
2ea30 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62  em = aMem = &Vdb
2ea40 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2ea50 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  )[-1];.  p->nMem
2ea60 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
2ea70 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
2ea80 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
2ea90 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
2eaa0 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
2eab0 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
2eac0 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e  ->nMem+1];.  p->
2ead0 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
2eae0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
2eaf0 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
2eb00 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46  nOp;.  p->aOnceF
2eb10 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e  lag = (u8 *)&p->
2eb20 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72  apCsr[p->nCursor
2eb30 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ];.  p->nOnceFla
2eb40 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  g = pProgram->nO
2eb50 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nce;.#ifdef SQLI
2eb60 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2eb70 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
2eb80 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
2eb90 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d  f.  pOp = &aOp[-
2eba0 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e  1];.  memset(p->
2ebb0 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d  aOnceFlag, 0, p-
2ebc0 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20  >nOnceFlag);..  
2ebd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ebe0 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
2ebf0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2ec00 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
2ec10 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
2ec20 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
2ec30 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
2ec40 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2ec50 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
2ec60 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
2ec70 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
2ec80 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
2ec90 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
2eca0 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
2ecb0 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
2ecc0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
2ecd0 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
2ece0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
2ecf0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
2ed00 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
2ed10 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
2ed20 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
2ed30 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2ed40 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
2ed50 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
2ed60 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
2ed70 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
2ed80 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2ed90 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
2eda0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
2edb0 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
2edc0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
2edd0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2ede0 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
2edf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2ee00 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
2ee10 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
2ee20 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
2ee30 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2ee40 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
2ee50 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2ee60 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
2ee70 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
2ee80 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
2ee90 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
2eea0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
2eeb0 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
2eec0 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
2eed0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
2eee0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2eef0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2ef00 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
2ef10 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2ef20 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
2ef30 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
2ef40 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2ef50 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
2ef60 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
2ef70 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
2ef80 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
2ef90 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
2efa0 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
2efb0 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
2efc0 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
2efd0 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
2efe0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2eff0 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
2f000 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
2f010 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
2f020 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
2f030 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
2f040 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
2f050 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
2f060 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
2f070 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2f080 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
2f090 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
2f0a0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
2f0b0 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
2f0c0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2f0d0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
2f0e0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2f0f0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
2f100 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2f110 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
2f120 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2f130 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
2f140 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
2f150 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2f160 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
2f170 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2f180 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
2f190 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
2f1a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2f1b0 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
2f1c0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2f1d0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
2f1e0 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
2f1f0 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
2f200 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2f210 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
2f220 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2f230 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
2f240 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
2f250 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2f260 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
2f270 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
2f280 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2f290 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
2f2a0 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
2f2b0 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
2f2c0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
2f2d0 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
2f2e0 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
2f2f0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
2f300 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
2f310 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2f320 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
2f330 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2f340 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
2f350 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
2f360 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
2f370 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
2f380 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
2f390 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
2f3a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
2f3b0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
2f3c0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2f3d0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
2f3e0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
2f3f0 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
2f400 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2f410 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
2f420 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
2f430 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
2f440 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
2f450 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2f460 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2f470 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
2f480 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
2f490 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
2f4a0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2f4b0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
2f4c0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
2f4d0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2f4e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f4f0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2f500 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f510 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2f520 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
2f530 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
2f540 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f550 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
2f560 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
2f570 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
2f580 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
2f590 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
2f5a0 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
2f5b0 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
2f5c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
2f5d0 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
2f5e0 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
2f5f0 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
2f600 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
2f610 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
2f620 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2f630 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
2f640 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
2f650 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
2f660 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2f670 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
2f680 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
2f690 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
2f6a0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2f6b0 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
2f6c0 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
2f6d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
2f6e0 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
2f6f0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
2f700 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
2f710 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
2f720 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
2f730 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
2f740 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
2f750 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
2f760 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
2f770 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2f780 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
2f790 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2f7a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
2f7b0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2f7c0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
2f7d0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2f7e0 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
2f7f0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
2f800 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
2f810 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
2f820 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
2f830 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
2f840 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
2f850 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
2f860 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f870 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f880 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
2f890 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
2f8a0 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
2f8b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f8c0 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
2f8d0 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
2f8e0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
2f8f0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2f900 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
2f910 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
2f920 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2f930 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
2f940 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
2f950 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
2f960 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
2f970 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
2f980 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
2f990 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2f9a0 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
2f9b0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
2f9c0 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
2f9d0 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
2f9e0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2f9f0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2fa00 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
2fa10 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2fa20 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2fa30 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2fa40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2fa50 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2fa60 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2fa70 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
2fa80 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
2fa90 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
2faa0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
2fab0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
2fac0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2fad0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2fae0 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69  Opcode: OffsetLi
2faf0 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
2fb00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2fb10 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
2fb20 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c  P2]=r[P1]+max(0,
2fb30 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32  r[P3]) else r[P2
2fb40 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69  ]=(-1).**.** Thi
2fb50 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
2fb60 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65  s a commonly use
2fb70 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73  d computation as
2fb80 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
2fb90 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
2fba0 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31  T process.  r[P1
2fbb0 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69  ] holds the limi
2fbc0 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33  t counter.  r[P3
2fbd0 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f  ].** holds the o
2fbe0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20  ffset counter.  
2fbf0 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75  The opcode compu
2fc00 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  tes the combined
2fc10 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65   value.** of the
2fc20 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
2fc30 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  T and stores tha
2fc40 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d  t value in r[P2]
2fc50 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20  .  The r[P2].** 
2fc60 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69  value computed i
2fc70 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
2fc80 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
2fc90 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a  will need to be.
2fca0 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72  ** visited in or
2fcb0 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  der to complete 
2fcc0 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  the query..**.**
2fcd0 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72   If r[P3] is zer
2fce0 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
2fcf0 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
2fd00 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20  is no OFFSET.** 
2fd10 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
2fd20 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65   to be the value
2fd30 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72   of the LIMIT, r
2fd40 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72  [P1]..**.** if r
2fd50 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P1] is zero or 
2fd60 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
2fd70 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
2fd80 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b   LIMIT.** and r[
2fd90 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31  P2] is set to -1
2fda0 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  . .**.** Otherwi
2fdb0 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74  se, r[P2] is set
2fdc0 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72   to the sum of r
2fdd0 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a  [P1] and r[P3]..
2fde0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
2fdf0 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20  tLimit: {    /* 
2fe00 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a  in1, out2, in3 *
2fe10 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2fe20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
2fe30 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
2fe40 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  3];.  pOut = out
2fe50 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2fe60 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
2fe70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2fe80 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
2fe90 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
2fea0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 75  MEM_Int );.  pOu
2feb0 74 2d 3e 75 2e 69 20 3d 20 70 49 6e 31 2d 3e 75  t->u.i = pIn1->u
2fec0 2e 69 3c 3d 30 20 3f 20 2d 31 20 3a 20 70 49 6e  .i<=0 ? -1 : pIn
2fed0 31 2d 3e 75 2e 69 2b 28 70 49 6e 33 2d 3e 75 2e  1->u.i+(pIn3->u.
2fee0 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29  i>0?pIn3->u.i:0)
2fef0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ff00 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65   Opcode: IfNotZe
2ff10 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ro P1 P2 P3 * *.
2ff20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2ff30 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b  r[P1]!=0 then r[
2ff40 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32  P1]-=P3, goto P2
2ff50 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2ff60 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
2ff70 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
2ff80 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
2ff90 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
2ffa0 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65   initially nonze
2ffb0 72 6f 2c 20 74 68 65 6e 20 73 75 62 74 72 61 63  ro, then subtrac
2ffc0 74 20 50 33 20 66 72 6f 6d 20 74 68 65 20 76 61  t P3 from the va
2ffd0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2ffe0 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  P1 and.** jump t
2fff0 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69 73 74  o P2.  If regist
30000 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c  er P1 is initial
30010 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69  ly zero, leave i
30020 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a 20 61  t unchanged.** a
30030 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  nd fall through.
30040 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
30050 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  tZero: {        
30060 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
30070 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
30080 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
30090 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
300a0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
300b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
300c0 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69  ->u.i<0, 2);.  i
300d0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a  f( pIn1->u.i ){.
300e0 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d       pIn1->u.i -
300f0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20  = pOp->p3;.     
30100 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
30110 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30120 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72  ./* Opcode: Decr
30130 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a  JumpZero P1 P2 *
30140 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
30150 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d  : if (--r[P1])==
30160 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
30170 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
30180 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72   hold an integer
30190 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65  .  Decrement the
301a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
301b0 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a 75  er P1.** then ju
301c0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
301d0 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61  new value is exa
301e0 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61  ctly zero..*/.ca
301f0 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65  se OP_DecrJumpZe
30200 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75  ro: {      /* ju
30210 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
30220 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
30230 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
30240 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
30250 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
30260 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
30270 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
30280 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
30290 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
302a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
302b0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
302c0 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e  code: JumpZeroIn
302d0 63 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  cr P1 P2 * * *.*
302e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28  * Synopsis: if (
302f0 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f  r[P1]++)==0 ) go
30300 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  to P2.**.** The 
30310 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
30320 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
30330 67 65 72 2e 20 20 49 66 20 72 65 67 69 73 74 65  ger.  If registe
30340 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
30350 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20  y.** zero, then 
30360 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e 63  jump to P2.  Inc
30370 72 65 6d 65 6e 74 20 72 65 67 69 73 74 65 72 20  rement register 
30380 50 31 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  P1 regardless of
30390 20 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e   whether or.** n
303a0 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
303b0 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  aken..*/.case OP
303c0 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b  _JumpZeroIncr: {
303d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
303e0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
303f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
30400 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
30410 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
30420 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
30430 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  ken(pIn1->u.i==0
30440 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
30450 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 20 67  1->u.i++)==0 ) g
30460 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
30470 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
30480 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20  pcode: AggStep0 
30490 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
304a0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
304b0 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
304c0 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
304d0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
304e0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
304f0 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
30500 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
30510 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
30520 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
30530 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
30540 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
30550 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
30560 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
30570 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
30580 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
30590 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
305a0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
305b0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
305c0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
305d0 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
305e0 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
305f0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
30600 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
30610 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
30620 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
30630 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
30640 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
30650 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
30660 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
30670 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
30680 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
30690 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f  te3_context.** o
306a0 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73  bject that is us
306b0 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75  ed to run the fu
306c0 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
306d0 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68  r P3 is.** as th
306e0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
306f0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
30700 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
30710 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
30720 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
30730 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  essors..**.** Th
30740 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69  is opcode is ini
30750 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
30760 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e  OP_AggStep0.  On
30770 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f   first evaluatio
30780 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65  n,.** the FuncDe
30790 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69  f stored in P4 i
307a0 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
307b0 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
307c0 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f  ext and.** the o
307d0 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64  pcode is changed
307e0 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
307f0 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
30800 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c  on of the.** sql
30810 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c  ite3_context onl
30820 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20  y happens once, 
30830 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61  instead of on ea
30840 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a  ch call to the.*
30850 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e  * step function.
30860 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  .*/.case OP_AggS
30870 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  tep0: {.  int n;
30880 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
30890 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73  xt *pCtx;..  ass
308a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
308b0 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a  ==P4_FUNCDEF );.
308c0 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
308d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
308e0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
308f0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
30900 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
30910 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
30920 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
30930 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
30940 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61  ursor)+1) );.  a
30950 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
30960 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
30970 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
30980 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33    pCtx = sqlite3
30990 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
309a0 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20  sizeof(*pCtx) + 
309b0 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c  (n-1)*sizeof(sql
309c0 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20  ite3_value*));. 
309d0 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67   if( pCtx==0 ) g
309e0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
309f0 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20  tx->pMem = 0;.  
30a00 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f  pCtx->pFunc = pO
30a10 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70  p->p4.pFunc;.  p
30a20 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29  Ctx->iOp = (int)
30a30 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70  (pOp - aOp);.  p
30a40 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a  Ctx->pVdbe = p;.
30a50 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e    pCtx->argc = n
30a60 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20  ;.  pOp->p4type 
30a70 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20  = P4_FUNCCTX;.  
30a80 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70  pOp->p4.pCtx = p
30a90 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Ctx;.  pOp->opco
30aa0 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b  de = OP_AggStep;
30ab0 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
30ac0 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74  gh into OP_AggSt
30ad0 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f  ep */.}.case OP_
30ae0 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
30af0 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   i;.  sqlite3_co
30b00 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d  ntext *pCtx;.  M
30b10 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
30b20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
30b30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
30b40 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20  NCCTX );.  pCtx 
30b50 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a  = pOp->p4.pCtx;.
30b60 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
30b70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49  Op->p3];..  /* I
30b80 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
30b90 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74  is inside of a t
30ba0 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69  rigger, the regi
30bb0 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d  ster array in aM
30bc0 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20  em[].  ** might 
30bd0 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20  change from one 
30be0 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68  evaluation to th
30bf0 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78  e next.  The nex
30c00 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a  t block of code.
30c10 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73    ** checks to s
30c20 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74  ee if the regist
30c30 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61  er array has cha
30c40 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20  nged, and if so 
30c50 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61  it.  ** reinitia
30c60 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61  lizes the relava
30c70 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  nt parts of the 
30c80 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
30c90 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20  object */.  if( 
30ca0 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d  pCtx->pMem != pM
30cb0 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e  em ){.    pCtx->
30cc0 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20  pMem = pMem;.   
30cd0 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67   for(i=pCtx->arg
30ce0 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20  c-1; i>=0; i--) 
30cf0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20  pCtx->argv[i] = 
30d00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d  &aMem[pOp->p2+i]
30d10 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
30d20 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
30d30 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72  (i=0; i<pCtx->ar
30d40 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  gc; i++){.    as
30d50 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
30d60 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20  (pCtx->argv[i]) 
30d70 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
30d80 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
30d90 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b   pCtx->argv[i]);
30da0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70  .  }.#endif..  p
30db0 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69  Mem->n++;.  sqli
30dc0 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26  te3VdbeMemInit(&
30dd0 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  t, db, MEM_Null)
30de0 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
30df0 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72   &t;.  pCtx->fEr
30e00 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
30e10 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d  pCtx->skipFlag =
30e20 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75   0;.  (pCtx->pFu
30e30 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78  nc->xSFunc)(pCtx
30e40 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78  ,pCtx->argc,pCtx
30e50 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a  ->argv); /* IMP:
30e60 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
30e70 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45  /.  if( pCtx->fE
30e80 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20  rrorOrAux ){.   
30e90 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72   if( pCtx->isErr
30ea0 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  or ){.      sqli
30eb0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
30ec0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
30ed0 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20  lue_text(&t));. 
30ee0 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e       rc = pCtx->
30ef0 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
30f00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
30f10 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20  mRelease(&t);.  
30f20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
30f30 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  t( t.flags==MEM_
30f40 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66  Null );.  }.  if
30f50 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
30f60 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
30f70 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
30f80 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
30f90 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
30fa0 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71  ;.    if( i ) sq
30fb0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
30fc0 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
30fd0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
30fe0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
30ff0 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
31000 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
31010 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
31020 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  2.**.** Execute 
31030 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
31040 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
31050 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
31060 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
31070 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
31080 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
31090 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
310a0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
310b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
310c0 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
310d0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
310e0 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
310f0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
31100 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
31110 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
31120 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
31130 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
31140 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
31150 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
31160 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
31170 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
31180 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
31190 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
311a0 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
311b0 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
311c0 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
311d0 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
311e0 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
311f0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
31200 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
31210 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
31220 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
31230 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
31240 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
31250 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
31260 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
31270 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
31280 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
31290 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
312a0 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
312b0 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
312c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
312d0 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
312e0 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
312f0 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  nc);.  if( rc ){
31300 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
31310 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
31320 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
31330 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
31340 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
31350 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
31360 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
31370 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
31380 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
31390 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
313a0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
313b0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
313c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
313d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
313e0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
313f0 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
31400 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
31410 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
31420 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
31430 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
31440 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
31450 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
31460 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
31470 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
31480 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
31490 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
314a0 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
314b0 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
314c0 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
314d0 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
314e0 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
314f0 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
31500 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
31510 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
31520 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
31530 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
31540 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
31550 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
31560 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
31570 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
31580 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
31590 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
315a0 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
315b0 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
315c0 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
315d0 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
315e0 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
315f0 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
31600 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
31610 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
31620 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
31630 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31650 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
31660 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31680 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
31690 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316b0 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
316c0 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
316d0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
316e0 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
316f0 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
31700 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
31710 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31720 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
31730 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
31740 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
31750 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
31760 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
31770 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
31780 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
31790 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
317a0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
317b0 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
317c0 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
317d0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
317e0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
317f0 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
31800 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
31810 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
31820 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
31830 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
31840 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
31850 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
31860 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
31870 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
31880 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
31890 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
318a0 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
318b0 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
318c0 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
318d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
318e0 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
318f0 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
31900 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
31910 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
31920 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
31930 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
31940 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
31950 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
31960 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
31970 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
31980 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
31990 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
319a0 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
319b0 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
319c0 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
319d0 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
319e0 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
319f0 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
31a00 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
31a10 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
31a20 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
31a30 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
31a40 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
31a50 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
31a60 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
31a70 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
31a80 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
31a90 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
31aa0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
31ab0 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
31ac0 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20  out2 */.  Btree 
31ad0 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pBt;           
31ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72            /* Btr
31af0 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75  ee to change jou
31b00 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a  rnal mode of */.
31b10 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
31b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b30 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63    /* Pager assoc
31b40 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a  iated with pBt *
31b50 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20  /.  int eNew;   
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b70 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e      /* New journ
31b80 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  al mode */.  int
31b90 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20   eOld;          
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31bb0 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20  The old journal 
31bc0 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  mode */.#ifndef 
31bd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
31be0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
31bf0 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  ilename;        
31c00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
31c10 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70  abase file for p
31c20 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a  Pager */.#endif.
31c30 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
31c40 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
31c50 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e  ;.  eNew = pOp->
31c60 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e  p3;.  assert( eN
31c70 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
31c80 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20  LMODE_DELETE .  
31c90 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
31ca0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
31cb0 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20  TRUNCATE .      
31cc0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
31cd0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53  JOURNALMODE_PERS
31ce0 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  IST .       || e
31cf0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
31d00 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20  ALMODE_OFF.     
31d10 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
31d20 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
31d30 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ORY.       || eN
31d40 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
31d50 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20  LMODE_WAL.      
31d60 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
31d70 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
31d80 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Y.  );.  assert(
31d90 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
31da0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
31db0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
31dc0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
31dd0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
31de0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
31df0 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
31e00 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
31e10 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
31e20 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
31e30 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
31e40 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
31e50 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
31e60 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
31e70 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
31e80 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
31e90 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
31ea0 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
31eb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31ec0 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
31ed0 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
31ee0 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
31ef0 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f  er, 1);..  /* Do
31f00 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61   not allow a tra
31f10 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e  nsition to journ
31f20 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20  al_mode=WAL for 
31f30 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
31f40 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  in temporary sto
31f50 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56  rage or if the V
31f60 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  FS does not supp
31f70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72  ort shared memor
31f80 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e  y .  */.  if( eN
31f90 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
31fa0 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20  LMODE_WAL.   && 
31fb0 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30  (sqlite3Strlen30
31fc0 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20  (zFilename)==0  
31fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70           /* Temp
31fe0 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20   file */.       
31ff0 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  || !sqlite3Pager
32000 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61  WalSupported(pPa
32010 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68  ger))   /* No sh
32020 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70  ared-memory supp
32030 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20  ort */.  ){.    
32040 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
32050 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65  ..  if( (eNew!=e
32060 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64  Old).   && (eOld
32070 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
32080 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d  ODE_WAL || eNew=
32090 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
320a0 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20  DE_WAL).  ){.   
320b0 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
320c0 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62  mmit || db->nVdb
320d0 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20  eRead>1 ){.     
320e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
320f0 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  OR;.      sqlite
32100 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20  3VdbeError(p,.  
32110 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
32120 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
32130 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
32140 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
32150 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
32160 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
32170 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
32180 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
32190 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   );.      break;
321a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
321b0 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
321c0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
321d0 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
321e0 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
321f0 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
32200 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
32210 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
32220 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
32230 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
32240 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
32250 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
32260 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
32270 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
32280 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
32290 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
322a0 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
322b0 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
322c0 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
322d0 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
322e0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
322f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
32300 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
32310 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
32320 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
32330 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
32340 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
32350 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
32360 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
32370 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
32380 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
32390 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
323a0 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
323b0 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
323c0 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
323d0 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
323e0 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
323f0 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
32400 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
32410 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
32420 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
32430 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
32440 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
32450 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
32460 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
32470 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
32480 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
32490 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
324a0 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
324b0 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
324c0 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
324d0 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
324e0 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
324f0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
32500 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
32510 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
32520 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
32530 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
32540 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
32550 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
32560 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
32570 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
32580 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
32590 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
325a0 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
325b0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
325c0 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
325d0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
325e0 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  }.  eNew = sqlit
325f0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
32600 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
32610 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c  ew);..  pOut->fl
32620 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
32630 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
32640 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
32650 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
32660 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
32670 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
32680 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
32690 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
326a0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
326b0 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
326c0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
326d0 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
326e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23  );.  break;.};.#
326f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32700 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a  OMIT_PRAGMA */..
32710 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
32720 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29  ITE_OMIT_VACUUM)
32730 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
32740 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29  ITE_OMIT_ATTACH)
32750 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75  ./* Opcode: Vacu
32760 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  um * * * * *.**.
32770 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
32780 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
32790 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
327a0 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
327b0 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
327c0 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
327d0 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
327e0 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
327f0 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
32800 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
32810 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
32820 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
32830 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72  adOnly==0 );.  r
32840 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
32850 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
32860 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  , db);.  break;.
32870 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
32880 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
32890 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
328a0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
328b0 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
328c0 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
328d0 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
328e0 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
328f0 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
32900 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
32910 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
32920 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
32930 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
32940 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
32950 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
32960 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
32970 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
32980 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
32990 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
329a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
329b0 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
329c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
329d0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
329e0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
329f0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
32a00 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
32a10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
32a20 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
32a30 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
32a40 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
32a50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
32a60 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
32a70 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
32a80 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44  ken(rc==SQLITE_D
32a90 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  ONE,2);.  if( rc
32aa0 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
32ab0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
32ac0 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  _OK;.    goto ju
32ad0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
32ae0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
32af0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69  ./* Opcode: Expi
32b00 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  re P1 * * * *.**
32b10 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d  .** Cause precom
32b20 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
32b30 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65   to expire.  Whe
32b40 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61  n an expired sta
32b50 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65  tement.** is exe
32b60 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  cuted using sqli
32b70 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69  te3_step() it wi
32b80 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61  ll either automa
32b90 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65  tically.** repre
32ba0 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20  pare itself (if 
32bb0 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  it was originall
32bc0 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  y created using 
32bd0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
32be0 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77  v2()).** or it w
32bf0 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51  ill fail with SQ
32c00 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20  LITE_SCHEMA..** 
32c10 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
32c20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
32c30 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
32c40 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
32c50 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
32c60 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
32c70 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
32c80 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70  statement is exp
32c90 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ired..*/.case OP
32ca0 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
32cb0 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
32cc0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
32cd0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
32ce0 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
32cf0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
32d00 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
32d10 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
32d20 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
32d30 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
32d40 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
32d50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
32d60 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d  is: iDb=P1 root=
32d70 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a  P2 write=P3.**.*
32d80 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
32d90 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
32da0 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
32db0 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
32dc0 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
32dd0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
32de0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
32df0 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
32e00 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
32e10 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
32e20 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
32e30 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
32e40 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
32e50 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
32e60 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
32e70 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
32e80 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
32e90 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
32ea0 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
32eb0 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
32ec0 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
32ed0 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
32ee0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
32ef0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
32f00 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
32f10 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
32f20 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
32f30 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
32f40 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
32f50 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
32f60 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
32f70 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
32f80 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
32f90 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  (u8)pOp->p3;.  i
32fa0 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
32fb0 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
32fc0 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
32fd0 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
32fe0 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
32ff0 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
33000 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
33010 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
33020 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
33030 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b  treeMask, p1) );
33040 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57  .    assert( isW
33050 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69  riteLock==0 || i
33060 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b  sWriteLock==1 );
33070 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
33080 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28  3BtreeLockTable(
33090 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c  db->aDb[p1].pBt,
330a0 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74   pOp->p2, isWrit
330b0 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20  eLock);.    if( 
330c0 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54  (rc&0xFF)==SQLIT
330d0 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20  E_LOCKED ){.    
330e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
330f0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
33100 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
33110 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65  ror(p, "database
33120 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
33130 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d  : %s", z);.    }
33140 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
33150 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33160 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
33170 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
33180 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
33190 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
331a0 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
331b0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
331c0 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
331d0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
331e0 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
331f0 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
33200 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
33210 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
33220 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
33230 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
33240 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
33250 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
33260 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
33270 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
33280 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
33290 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
332a0 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
332b0 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  the error.** cod
332c0 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  e will be set to
332d0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a   SQLITE_LOCKED..
332e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69  */.case OP_VBegi
332f0 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70  n: {.  VTable *p
33300 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20  VTab;.  pVTab = 
33310 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
33320 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
33330 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62  bBegin(db, pVTab
33340 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29  );.  if( pVTab )
33350 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
33360 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61  rtErrmsg(p, pVTa
33370 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65  b->pVtab);.  bre
33380 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
33390 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
333a0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
333b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
333c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
333d0 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
333e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
333f0 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73  ** P2 is a regis
33400 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ter that holds t
33410 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
33420 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
33430 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43  tabase .** P1. C
33440 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
33450 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
33460 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
33470 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d  P_VCreate: {.  M
33480 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
33490 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
334a0 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
334b0 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
334c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b  onst char *zTab;
334d0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
334e0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
334f0 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65  /..  memset(&sMe
33500 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
33510 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d  m));.  sMem.db =
33520 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73   db;.  /* Becaus
33530 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61  e P2 is always a
33540 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20   static string, 
33550 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65  it is impossible
33560 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71   for the.  ** sq
33570 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
33580 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20  () to fail */.  
33590 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
335a0 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
335b0 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20  EM_Str)!=0 );.  
335c0 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
335d0 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
335e0 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b  EM_Static)!=0 );
335f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
33600 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d  dbeMemCopy(&sMem
33610 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
33620 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
33630 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
33640 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68  zTab = (const ch
33650 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
33660 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20  e_text(&sMem);. 
33670 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c   assert( zTab ||
33680 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
33690 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20  d );.  if( zTab 
336a0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
336b0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
336c0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a  e(db, pOp->p1, z
336d0 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  Tab, &p->zErrMsg
336e0 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
336f0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
33700 73 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  sMem);.  break;.
33710 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
33720 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
33730 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
33740 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
33750 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
33760 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
33770 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
33780 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
33790 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
337a0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
337b0 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
337c0 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
337d0 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
337e0 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
337f0 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  y: {.  db->nVDes
33800 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73  troy++;.  rc = s
33810 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
33820 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
33830 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
33840 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d   db->nVDestroy--
33850 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
33860 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
33870 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
33880 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
33890 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
338a0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
338b0 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
338c0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
338d0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
338e0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
338f0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
33900 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
33910 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
33920 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
33930 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
33940 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
33950 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
33960 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
33970 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
33980 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
33990 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
339a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
339b0 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a  _cursor *pVCur;.
339c0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
339d0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
339e0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
339f0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
33a00 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
33a10 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  );.  pCur = 0;. 
33a20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70 56   pVCur = 0;.  pV
33a30 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
33a40 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66  tab->pVtab;.  if
33a50 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45  ( pVtab==0 || NE
33a60 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75  VER(pVtab->pModu
33a70 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  le==0) ){.    rc
33a80 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
33a90 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
33aa0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
33ab0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72  ab->pModule;.  r
33ac0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
33ad0 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75 72  en(pVtab, &pVCur
33ae0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
33af0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
33b00 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51  pVtab);.  if( SQ
33b10 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20  LITE_OK==rc ){. 
33b20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
33b30 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
33b40 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
33b50 2a 2f 0a 20 20 20 20 70 56 43 75 72 2d 3e 70 56  */.    pVCur->pV
33b60 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
33b70 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
33b80 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
33b90 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
33ba0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
33bb0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
33bc0 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42 29  1, CURTYPE_VTAB)
33bd0 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
33be0 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 75 63  {.      pCur->uc
33bf0 2e 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b 0a  .pVCur = pVCur;.
33c00 20 20 20 20 20 20 70 56 74 61 62 2d 3e 6e 52 65        pVtab->nRe
33c10 66 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  f++;.    }else{.
33c20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
33c30 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
33c40 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
33c50 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a  >xClose(pVCur);.
33c60 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
33c70 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  m;.    }.  }.  b
33c80 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
33c90 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
33ca0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
33cb0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33cc0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
33cd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
33ce0 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
33cf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70  .** Synopsis: ip
33d00 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d  lan=r[P3] zplan=
33d10 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  'P4'.**.** P1 is
33d20 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
33d30 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
33d40 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
33d50 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
33d60 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
33d70 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
33d80 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
33d90 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
33da0 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
33db0 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
33dc0 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
33dd0 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
33de0 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
33df0 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
33e00 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
33e10 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
33e20 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
33e30 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
33e40 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
33e50 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
33e60 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
33e70 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
33e80 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
33e90 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
33ea0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
33eb0 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
33ec0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
33ed0 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
33ee0 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
33ef0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
33f00 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
33f10 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
33f20 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
33f30 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
33f40 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
33f50 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
33f60 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
33f70 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
33f80 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
33f90 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
33fa0 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
33fb0 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
33fc0 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
33fd0 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
33fe0 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
33ff0 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
34000 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
34010 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
34020 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
34030 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
34040 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
34050 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
34060 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
34070 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20   *pQuery;.  Mem 
34080 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65  *pArgc;.  sqlite
34090 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
340a0 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  VCur;.  sqlite3_
340b0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
340c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
340d0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
340e0 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
340f0 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
34100 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
34110 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72    pArgc = &pQuer
34120 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70  y[1];.  pCur = p
34130 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
34140 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
34150 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29  sValid(pQuery) )
34160 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
34170 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
34180 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
34190 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
341a0 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
341b0 20 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e 75   pVCur = pCur->u
341c0 63 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61 62  c.pVCur;.  pVtab
341d0 20 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b   = pVCur->pVtab;
341e0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
341f0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
34200 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
34210 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
34220 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
34230 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
34240 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
34250 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
34260 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
34270 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
34280 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
34290 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
342a0 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
342b0 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
342c0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73   method */.  res
342d0 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20   = 0;.  apArg = 
342e0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28  p->apArg;.  for(
342f0 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
34300 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69  ++){.    apArg[i
34310 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
34320 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64  .  }.  rc = pMod
34330 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 43  ule->xFilter(pVC
34340 75 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d  ur, iQuery, pOp-
34350 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41  >p4.z, nArg, apA
34360 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  rg);.  sqlite3Vt
34370 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
34380 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
34390 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
343a0 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
343b0 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b  le->xEof(pVCur);
343c0 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  .  }.  pCur->nul
343d0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65  lRow = 0;.  Vdbe
343e0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
343f0 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
34400 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
34410 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  p2;.  break;.}.#
34420 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
34430 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34440 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
34450 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34460 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
34470 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  : VColumn P1 P2 
34480 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
34490 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d  is: r[P3]=vcolum
344a0 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  n(P2).**.** Stor
344b0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
344c0 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20  he P2-th column 
344d0 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66  of.** the row of
344e0 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
344f0 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  le that the .** 
34500 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
34510 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65  nting to into re
34520 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
34530 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
34540 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
34550 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
34560 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
34570 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
34580 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
34590 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
345a0 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
345b0 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
345c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
345d0 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
345e0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
345f0 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AB );.  assert( 
34600 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
34610 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
34620 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
34630 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
34640 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
34650 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
34660 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
34670 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
34680 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
34690 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
346a0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
346b0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63  pVtab = pCur->uc
346c0 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
346d0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
346e0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
346f0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
34700 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
34710 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
34720 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
34730 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
34740 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65  ut = pDest;.  Me
34750 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
34760 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
34770 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
34780 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e  Column(pCur->uc.
34790 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74  pVCur, &sContext
347a0 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
347b0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
347c0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
347d0 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
347e0 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
347f0 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
34800 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
34810 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
34820 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63  oding(pDest, enc
34830 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
34840 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
34850 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
34860 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
34870 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
34880 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
34890 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
348a0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
348b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
348c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
348d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
348e0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
348f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34900 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
34910 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20  : VNext P1 P2 * 
34920 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63  * *.**.** Advanc
34930 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
34940 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  P1 to the next r
34950 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74  ow in its result
34960 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70   set and.** jump
34970 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
34980 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20  P2.  Or, if the 
34990 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
349a0 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65  s reached.** the
349b0 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75   end of its resu
349c0 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c  lt set, then fal
349d0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
349e0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
349f0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e  n..*/.case OP_VN
34a00 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ext: {   /* jump
34a10 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
34a20 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
34a30 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
34a40 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
34a50 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72  t res;.  VdbeCur
34a60 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65  sor *pCur;..  re
34a70 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20  s = 0;.  pCur = 
34a80 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
34a90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
34aa0 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
34ab0 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 69  TYPE_VTAB );.  i
34ac0 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
34ad0 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
34ae0 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
34af0 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  r->uc.pVCur->pVt
34b00 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
34b10 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
34b20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
34b30 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
34b40 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
34b50 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
34b60 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
34b70 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
34b80 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
34b90 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
34ba0 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
34bb0 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
34bc0 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
34bd0 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
34be0 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
34bf0 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
34c00 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
34c10 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
34c20 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
34c30 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
34c40 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
34c50 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
34c60 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
34c70 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
34c80 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
34c90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
34ca0 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d  sor..  */.  rc =
34cb0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
34cc0 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b  pCur->uc.pVCur);
34cd0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
34ce0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
34cf0 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  tab);.  if( rc==
34d00 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
34d10 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
34d20 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70 56  xEof(pCur->uc.pV
34d30 43 75 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65  Cur);.  }.  Vdbe
34d40 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73  BranchTaken(!res
34d50 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20  ,2);.  if( !res 
34d60 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
34d70 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
34d80 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f   to P2 */.    go
34d90 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
34da0 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
34db0 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74  rrupt;.  }.  got
34dc0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
34dd0 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rrupt;.}.#endif 
34de0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
34df0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
34e00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34e10 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34e20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
34e30 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
34e40 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
34e50 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
34e60 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
34e70 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
34e80 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
34e90 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
34ea0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
34eb0 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
34ec0 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
34ed0 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
34ee0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
34ef0 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
34f00 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
34f10 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
34f20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
34f30 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
34f40 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
34f50 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
34f60 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
34f70 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
34f80 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
34f90 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
34fa0 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
34fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
34fc0 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
34fd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
34fe0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
34ff0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
35000 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
35010 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
35020 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
35030 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
35040 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
35050 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
35060 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
35070 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
35080 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
35090 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
350a0 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
350b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
350c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
350d0 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
350e0 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  F8);.  if( rc==S
350f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
35100 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  rc = pVtab->pMod
35110 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74  ule->xRename(pVt
35120 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20  ab, pName->z);. 
35130 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
35140 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
35150 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  tab);.    p->exp
35160 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
35170 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
35180 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
35190 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
351a0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
351b0 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
351c0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
351d0 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
351e0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
351f0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
35200 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
35210 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
35220 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
35230 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
35240 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
35250 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
35260 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
35270 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
35280 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
35290 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
352a0 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
352b0 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
352c0 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
352d0 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
352e0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
352f0 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
35300 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
35310 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
35320 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
35330 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
35340 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
35350 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
35360 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
35370 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
35380 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
35390 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
353a0 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
353b0 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
353c0 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
353d0 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
353e0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
353f0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
35400 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
35410 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
35420 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
35430 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
35440 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
35450 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
35460 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
35470 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
35480 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
35490 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
354a0 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
354b0 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
354c0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
354d0 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
354e0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
354f0 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
35500 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
35510 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
35520 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
35530 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
35540 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
35550 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
35560 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
35570 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
35580 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
35590 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
355a0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
355b0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
355c0 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
355d0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
355e0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
355f0 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
35600 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
35610 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
35620 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
35630 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
35640 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
35650 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
35660 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
35670 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
35680 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
35690 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
356a0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
356b0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
356c0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
356d0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
356e0 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
356f0 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
35700 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
35710 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
35720 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35730 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
35740 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
35750 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
35760 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
35770 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
35780 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
35790 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
357a0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
357b0 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
357c0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
357d0 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
357e0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
357f0 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
35800 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
35810 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
35820 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
35830 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
35840 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f  break;.  }.  pMo
35850 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
35860 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
35870 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
35880 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
35890 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
358a0 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
358b0 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
358c0 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
358d0 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43  ct = db->vtabOnC
358e0 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41  onflict;.    apA
358f0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
35900 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
35910 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
35920 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
35930 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
35940 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20   memIsValid(pX) 
35950 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
35960 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29  tToChange(p, pX)
35970 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
35980 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
35990 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  +;.    }.    db-
359a0 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
359b0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
359c0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
359d0 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
359e0 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
359f0 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  ;.    db->vtabOn
35a00 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f  Conflict = vtabO
35a10 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73  nConflict;.    s
35a20 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
35a30 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
35a40 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
35a50 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
35a60 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
35a70 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
35a80 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
35a90 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
35aa0 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
35ab0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
35ac0 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
35ad0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
35ae0 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
35af0 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70  _CONSTRAINT && p
35b00 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43  Op->p4.pVtab->bC
35b10 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20  onstraint ){.   
35b20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d     if( pOp->p5==
35b30 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
35b40 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
35b50 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  _OK;.      }else
35b60 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72  {.        p->err
35b70 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70  orAction = ((pOp
35b80 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
35b90 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70  ) ? OE_Abort : p
35ba0 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d  Op->p5);.      }
35bb0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
35bc0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
35bd0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
35be0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
35bf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
35c00 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
35c10 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
35c20 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
35c30 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
35c40 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
35c50 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
35c60 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
35c70 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
35c80 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
35c90 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
35ca0 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
35cb0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
35cc0 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
35cd0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
35ce0 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
35cf0 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
35d00 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e  reeLastPage(db->
35d10 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
35d20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
35d30 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20  ndif...#ifndef  
35d40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
35d50 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
35d60 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31  ode: MaxPgcnt P1
35d70 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
35d80 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20   Try to set the 
35d90 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
35da0 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  nt for database 
35db0 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
35dc0 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74  in P3..** Do not
35dd0 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   let the maximum
35de0 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c   page count fall
35df0 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65   below the curre
35e00 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e  nt page count an
35e10 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e  d.** do not chan
35e20 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  ge the maximum p
35e30 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
35e40 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  if P3==0..**.** 
35e50 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75  Store the maximu
35e60 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74  m page count aft
35e70 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e  er the change in
35e80 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
35e90 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e  .case OP_MaxPgcn
35ea0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
35eb0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73  /* out2 */.  uns
35ec0 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
35ed0 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
35ee0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
35ef0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
35f00 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
35f10 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
35f20 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20    newMax = 0;.  
35f30 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
35f40 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69     newMax = sqli
35f50 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
35f60 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  (pBt);.    if( n
35f70 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65  ewMax < (unsigne
35f80 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d  d)pOp->p3 ) newM
35f90 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70  ax = (unsigned)p
35fa0 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f  Op->p3;.  }.  pO
35fb0 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
35fc0 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75  3BtreeMaxPageCou
35fd0 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b  nt(pBt, newMax);
35fe0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
35ff0 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  if.../* Opcode: 
36000 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a  Init * P2 * P4 *
36010 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53  .** Synopsis:  S
36020 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a  tart at P2.**.**
36030 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69   Programs contai
36040 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  n a single insta
36050 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  nce of this opco
36060 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66  de as the very f
36070 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a  irst.** opcode..
36080 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
36090 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
360a0 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
360b0 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
360c0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
360d0 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
360e0 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
360f0 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
36100 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72   callback..** Or
36110 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c   if P4 is blank,
36120 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20   use the string 
36130 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
36140 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a  te3_sql()..**.**
36150 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65   If P2 is not ze
36160 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ro, jump to inst
36170 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63  ruction P2..*/.c
36180 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20  ase OP_Init: {  
36190 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
361a0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63  */.  char *zTrac
361b0 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23  e;.  char *z;..#
361c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
361d0 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64  IT_TRACE.  if( d
361e0 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20  b->xTrace.   && 
361f0 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20  !p->doingRerun. 
36200 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28    && (zTrace = (
36210 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
36220 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
36230 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20  )!=0.  ){.    z 
36240 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70  = sqlite3VdbeExp
36250 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65  andSql(p, zTrace
36260 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  );.    db->xTrac
36270 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
36280 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   z);.    sqlite3
36290 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20  DbFree(db, z);. 
362a0 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
362b0 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  _USE_FCNTL_TRACE
362c0 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  .  zTrace = (pOp
362d0 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
362e0 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20  .z : p->zSql);. 
362f0 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20   if( zTrace ){. 
36300 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f     int i;.    fo
36310 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
36320 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
36330 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
36340 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30  btreeMask, i)==0
36350 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
36360 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
36370 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e  control(db, db->
36380 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51  aDb[i].zName, SQ
36390 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  LITE_FCNTL_TRACE
363a0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d  , zTrace);.    }
363b0 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
363c0 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f  QLITE_USE_FCNTL_
363d0 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20  TRACE */.#ifdef 
363e0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
363f0 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
36400 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29  SQLITE_SqlTrace)
36410 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63  !=0.   && (zTrac
36420 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
36430 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
36440 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
36450 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50     sqlite3DebugP
36460 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65  rintf("SQL-trace
36470 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29  : %s\n", zTrace)
36480 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
36490 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
364a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
364b0 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20  _OMIT_TRACE */. 
364c0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
364d0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
364e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64    break;.}..#ifd
364f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
36500 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 2f 2a  _CURSOR_HINTS./*
36510 20 4f 70 63 6f 64 65 3a 20 43 75 72 73 6f 72 48   Opcode: CursorH
36520 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
36530 2a 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20  **.** Provide a 
36540 68 69 6e 74 20 74 6f 20 63 75 72 73 6f 72 20 50  hint to cursor P
36550 31 20 74 68 61 74 20 69 74 20 6f 6e 6c 79 20 6e  1 that it only n
36560 65 65 64 73 20 74 6f 20 72 65 74 75 72 6e 20 72  eeds to return r
36570 6f 77 73 20 74 68 61 74 0a 2a 2a 20 73 61 74 69  ows that.** sati
36580 73 66 79 20 74 68 65 20 45 78 70 72 20 69 6e 20  sfy the Expr in 
36590 50 34 2e 20 20 54 4b 5f 52 45 47 49 53 54 45 52  P4.  TK_REGISTER
365a0 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 50 34   terms in the P4
365b0 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66 65   expression refe
365c0 72 0a 2a 2a 20 74 6f 20 76 61 6c 75 65 73 20 63  r.** to values c
365d0 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 20 69 6e  urrently held in
365e0 20 72 65 67 69 73 74 65 72 73 2e 20 20 54 4b 5f   registers.  TK_
365f0 43 4f 4c 55 4d 4e 20 74 65 72 6d 73 20 69 6e 20  COLUMN terms in 
36600 74 68 65 20 50 34 0a 2a 2a 20 65 78 70 72 65 73  the P4.** expres
36610 73 69 6f 6e 20 72 65 66 65 72 20 74 6f 20 63 6f  sion refer to co
36620 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 62 2d 74  lumns in the b-t
36630 72 65 65 20 74 6f 20 77 68 69 63 68 20 63 75 72  ree to which cur
36640 73 6f 72 20 50 31 20 69 73 20 70 6f 69 6e 74 69  sor P1 is pointi
36650 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ng..*/.case OP_C
36660 75 72 73 6f 72 48 69 6e 74 3a 20 7b 0a 20 20 56  ursorHint: {.  V
36670 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
36680 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
36690 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
366a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
366b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
366c0 79 70 65 3d 3d 50 34 5f 45 58 50 52 20 29 3b 0a  ype==P4_EXPR );.
366d0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
366e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
366f0 70 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  pC ){.    assert
36700 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
36710 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
36720 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
36730 65 43 75 72 73 6f 72 48 69 6e 74 28 70 43 2d 3e  eCursorHint(pC->
36740 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
36750 45 5f 48 49 4e 54 5f 52 41 4e 47 45 2c 0a 20 20  E_HINT_RANGE,.  
36760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36770 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 34           pOp->p4
36780 2e 70 45 78 70 72 2c 20 61 4d 65 6d 29 3b 0a 20  .pExpr, aMem);. 
36790 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
367a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45  ndif /* SQLITE_E
367b0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
367c0 54 53 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  TS */../* Opcode
367d0 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
367e0 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
367f0 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
36800 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
36810 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
36820 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
36830 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
36840 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
36850 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
36860 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
36870 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
36880 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
36890 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
368a0 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
368b0 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
368c0 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
368d0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
368e0 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
368f0 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
36900 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
36910 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
36920 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
36930 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
36940 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
36950 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
36960 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
36970 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
36980 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
36990 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70  >opcode==OP_Noop
369a0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
369b0 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20  =OP_Explain );. 
369c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
369d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
369e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
369f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
36a20 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
36a30 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
36a40 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
36a50 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
36a60 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
36a70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
36a80 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
36a90 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
36aa0 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
36ab0 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
36ac0 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
36ad0 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
36ae0 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
36af0 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
36b00 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
36b10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36b30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36b50 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
36b60 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
36b70 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
36b80 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73   u64 endTime = s
36b90 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
36ba0 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d        if( endTim
36bb0 65 3e 73 74 61 72 74 20 29 20 70 4f 72 69 67 4f  e>start ) pOrigO
36bc0 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64  p->cycles += end
36bd0 54 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20  Time - start;.  
36be0 20 20 20 20 70 4f 72 69 67 4f 70 2d 3e 63 6e 74      pOrigOp->cnt
36bf0 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
36c00 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
36c10 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73  lowing code adds
36c20 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20   nothing to the 
36c30 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61  actual functiona
36c40 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74  lity.    ** of t
36c50 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20  he program.  It 
36c60 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72  is only here for
36c70 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62   testing and deb
36c80 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f  ugging..    ** O
36c90 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
36ca0 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43  , it does burn C
36cb0 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20  PU cycles every 
36cc0 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20  time through.   
36cd0 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f   ** the evaluato
36ce0 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63  r loop.  So we c
36cf0 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20  an leave it out 
36d00 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64  when NDEBUG is d
36d10 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
36d20 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
36d30 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 26    assert( pOp>=&
36d40 61 4f 70 5b 2d 31 5d 20 26 26 20 70 4f 70 3c 26  aOp[-1] && pOp<&
36d50 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 20 29 3b  aOp[p->nOp-1] );
36d60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
36d70 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
36d80 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
36d90 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
36da0 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
36db0 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22  printf("rc=%d\n"
36dc0 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ,rc);.      if( 
36dd0 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73  pOrigOp->opflags
36de0 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 29 20   & (OPFLG_OUT2) 
36df0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
36e00 74 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70  terTrace(pOrigOp
36e10 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 72 69  ->p2, &aMem[pOri
36e20 67 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  gOp->p2]);.     
36e30 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 72   }.      if( pOr
36e40 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  igOp->opflags & 
36e50 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20  OPFLG_OUT3 ){.  
36e60 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
36e70 61 63 65 28 70 4f 72 69 67 4f 70 2d 3e 70 33 2c  ace(pOrigOp->p3,
36e80 20 26 61 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e   &aMem[pOrigOp->
36e90 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
36ea0 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
36eb0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
36ec0 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
36ed0 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
36ee0 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
36ef0 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
36f00 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
36f10 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
36f20 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
36f30 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
36f40 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
36f50 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
36f60 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
36f70 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
36f80 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
36f90 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
36fa0 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65  p->rc = rc;.  te
36fb0 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
36fc0 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
36fd0 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  !=0 );.  sqlite3
36fe0 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d  _log(rc, "statem
36ff0 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64  ent aborts at %d
37000 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20  : [%s] %s", .   
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
37030 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
37040 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65  rrMsg);.  sqlite
37050 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
37060 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49  if( rc==SQLITE_I
37070 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d  OERR_NOMEM ) db-
37080 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
37090 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
370a0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65  _ERROR;.  if( re
370b0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
370c0 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
370d0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
370e0 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f  db, resetSchemaO
370f0 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a  nFault-1);.  }..
37100 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
37110 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
37120 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
37130 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
37140 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
37150 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
37160 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
37170 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
37180 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
37190 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f  rn:.  db->lastRo
371a0 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
371b0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d  .  testcase( nVm
371c0 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61  Step>0 );.  p->a
371d0 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
371e0 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
371f0 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74  P] += (int)nVmSt
37200 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ep;.  sqlite3Vdb
37210 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 61 73 73  eLeave(p);.  ass
37220 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f  ert( rc!=SQLITE_
37230 4f 4b 20 7c 7c 20 6e 45 78 74 72 61 44 65 6c 65  OK || nExtraDele
37240 74 65 3d 3d 30 20 0a 20 20 20 20 20 20 20 7c 7c  te==0 .       ||
37250 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
37260 28 22 44 45 4c 45 54 45 25 22 2c 70 2d 3e 7a 53  ("DELETE%",p->zS
37270 71 6c 2c 30 29 21 3d 30 20 0a 20 20 29 3b 0a 20  ql,0)!=0 .  );. 
37280 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f   return rc;..  /
37290 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
372a0 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  f a string or bl
372b0 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53  ob larger than S
372c0 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
372d0 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74  .  ** is encount
372e0 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62  ered..  */.too_b
372f0 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ig:.  sqlite3Vdb
37300 65 45 72 72 6f 72 28 70 2c 20 22 73 74 72 69 6e  eError(p, "strin
37310 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
37320 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
37330 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
37340 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
37350 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
37360 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
37370 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
37380 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
37390 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
373a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
373b0 6f 72 28 70 2c 20 22 6f 75 74 20 6f 66 20 6d 65  or(p, "out of me
373c0 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
373d0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
373e0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
373f0 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
37400 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
37410 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
37420 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
37430 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
37440 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
37450 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
37460 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
37470 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
37480 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
37490 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
374a0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
374b0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
374c0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
374d0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
374e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
374f0 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
37500 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
37510 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
37520 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
37530 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
37540 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
37550 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
37560 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
37570 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
37580 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
37590 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
375a0 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
375b0 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
375c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
375d0 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
375e0 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56 64   rc;.  sqlite3Vd
375f0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
37600 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
37610 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
37620 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.