/ Hex Artifact Content
Login

Artifact 49e659bc165e99b28492004b440e22146dc898ab:


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 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
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 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
4770: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4780: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4790: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
47a0: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
47b0: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
47c0: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
47d0: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
47e0: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
47f0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4800: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4810: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4820: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4830: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4840: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4850: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4860: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4870: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4880: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
4890: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
48a0: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
48b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
48c0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
48d0: 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65  Limit = (unsigne
48e0: 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  d)p->aCounter[SQ
48f0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4900: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66  VM_STEP];.    if
4910: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4920: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4930: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4940: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4950: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4960: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4970: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
4980: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4990: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
49a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
49b0: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
49c0: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
49d0: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
49e0: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
49f0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4a00: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4a10: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4a20: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4a30: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4a40: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4a50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4a60: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4a70: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4a80: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4a90: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4aa0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4ab0: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4ac0: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4ad0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4ae0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4af0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4b00: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4b10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4b20: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4b30: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4b40: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4b50: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4b60: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4b70: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
4b80: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
4b90: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
4ba0: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
4bb0: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
4bc0: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
4bd0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
4be0: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
4bf0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
4c00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c10: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4c20: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c30: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4c40: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
4c50: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
4c60: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4c70: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4c80: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4c90: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4ca0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4cb0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4cc0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4cd0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4ce0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4cf0: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4d00: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
4d10: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4d20: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4d30: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4d40: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20  p = &aOp[pc];.. 
4d50: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
4d60: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
4d70: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
4d80: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
4d90: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4da0: 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
4db0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4dc0: 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71  race ){.      sq
4dd0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4de0: 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70  (stdout, pc, pOp
4df0: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
4e00: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
4e10: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
4e20: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
4e30: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
4e40: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
4e50: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
4e60: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
4e70: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
4e80: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4e90: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
4ea0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4eb0: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
4ec0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4ed0: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
4ee0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
4ef0: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
4f00: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
4f10: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
4f20: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4f30: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
4f40: 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69  On any opcode wi
4f50: 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65  th the "out2-pre
4f60: 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72  release" tag, fr
4f70: 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78  ee any.    ** ex
4f80: 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  ternal allocatio
4f90: 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32  ns out of mem[p2
4fa0: 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32  ] and set mem[p2
4fb0: 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61  ] to be.    ** a
4fc0: 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65  n undefined inte
4fd0: 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69  ger.  Opcodes wi
4fe0: 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69  ll either fill i
4ff0: 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
5000: 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f    ** value or co
5010: 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  nvert mem[p2] to
5020: 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70   a different typ
5030: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
5040: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
5050: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
5060: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5070: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
5080: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
5090: 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
50a0: 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
50b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
50c0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
50d0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
50e0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
50f0: 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   );.      pOut =
5100: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
5110: 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
5120: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
5130: 3b 0a 20 20 20 20 20 20 69 66 28 20 56 64 62 65  ;.      if( Vdbe
5140: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
5150: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
5160: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
5170: 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
5180: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
5190: 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74   }..    /* Sanit
51a0: 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74  y checking on ot
51b0: 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  her operands */.
51c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
51d0: 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70  BUG.    if( (pOp
51e0: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
51f0: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
5200: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5210: 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p1>0 );.      as
5220: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28  sert( pOp->p1<=(
5230: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5240: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  or) );.      ass
5250: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
5260: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5270: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5280: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
5290: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
52a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
52b0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
52c0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
52d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
52e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
52f0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5300: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5310: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5320: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5330: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5340: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
5350: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5360: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
5370: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  id(&aMem[pOp->p2
5380: 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
5390: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
53a0: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
53b0: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  s(&aMem[pOp->p2]
53c0: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
53d0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
53e0: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
53f0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5400: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5410: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
5420: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5430: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5440: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5450: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
5460: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5470: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5480: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5490: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p3]) );.      a
54a0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
54b0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
54c0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
54d0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p3]) );.      RE
54e0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
54f0: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
5500: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p3]);.    }.   
5510: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5520: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29  gs & OPFLG_OUT2)
5530: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5540: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5550: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5560: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
5570: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
5580: 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
5590: 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
55a0: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
55b0: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
55c0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
55d0: 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT3)!=0 ){.    
55e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
55f0: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  3>0 );.      ass
5600: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
5610: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
5620: 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  r) );.      memA
5630: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5640: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5650: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
5660: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5670: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5680: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5690: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
56d0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
56e0: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
56f0: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5700: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5710: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5720: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5730: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5740: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5750: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5760: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5770: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5780: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5790: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
57a0: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
57b0: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
57c0: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
57d0: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
57e0: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
57f0: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5800: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5810: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5820: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5830: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5840: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5850: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5860: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5870: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5880: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5890: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
58a0: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
58b0: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
58c0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
58d0: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
58e0: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
58f0: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5900: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5910: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5920: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5930: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5940: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5950: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5960: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5970: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5980: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5990: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
59a0: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
59b0: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
59c0: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
59d0: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
59e0: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
59f0: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5a00: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5a10: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5a20: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5a30: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5a40: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5a50: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5a60: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5a70: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5a80: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5a90: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5aa0: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5ab0: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5ac0: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5ad0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5ae0: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5af0: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5b00: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5b10: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5b20: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5b30: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5b40: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5b50: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5b60: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5b70: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5b80: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5b90: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5ba0: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5bb0: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70  in2, in3, out2_p
5bc0: 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c  rerelease, out2,
5bd0: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
5be0: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
5bf0: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
5c00: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
5c10: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
5c20: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
5c30: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
5c40: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
5c50: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
5c60: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
5c70: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
5c80: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
5c90: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
5ca0: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
5cb0: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
5cc0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
5cd0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
5ce0: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
5cf0: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
5d00: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
5d10: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
5d20: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
5d30: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
5d40: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
5d50: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
5d60: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
5d70: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
5d80: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
5d90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5da0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5db0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5dc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
5de0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
5df0: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
5e00: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
5e10: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
5e20: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
5e30: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
5e40: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
5e50: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
5e60: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
5e70: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
5e80: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a   the program..**
5e90: 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d  .** The P1 param
5ea0: 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75  eter is not actu
5eb0: 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69  ally used by thi
5ec0: 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76  s opcode.  Howev
5ed0: 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d  er, it.** is som
5ee0: 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20  etimes set to 1 
5ef0: 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20  instead of 0 as 
5f00: 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f  a hint to the co
5f10: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c  mmand-line shell
5f20: 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f  .** that this Go
5f30: 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d  to is the bottom
5f40: 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74   of a loop and t
5f50: 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72  hat the lines fr
5f60: 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f  om P2 down.** to
5f70: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e   the current lin
5f80: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5f90: 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e  nted for EXPLAIN
5fa0: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
5fb0: 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20   OP_Goto: {     
5fc0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
5fd0: 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  */.  pc = pOp->p
5fe0: 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63  2 - 1;..  /* Opc
5ff0: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
6000: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
6010: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
6020: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
6030: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f  ** OP_VNext, OP_
6040: 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f  RowSetNext, or O
6050: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6060: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6070: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6080: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6090: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
60a0: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
60b0: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
60c0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
60d0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
60e0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
60f0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
6100: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
6110: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6120: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6130: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6140: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6150: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6160: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6170: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6180: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6190: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
61a0: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
61b0: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
61c0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
61d0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
61e0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
61f0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
6200: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
6210: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6220: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6230: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6240: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6250: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6260: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6270: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6280: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6290: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
62a0: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
62b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
62c0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
62d0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
62e0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
62f0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
6300: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
6310: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6320: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6330: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6340: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6350: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6360: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6370: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6380: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6390: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
63a0: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
63b0: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
63c0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
63d0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
63e0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
63f0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
6400: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
6410: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6420: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
6430: 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65  ess!=0 && nVmSte
6440: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
6450: 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t ){.    assert(
6460: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6470: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6480: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6490: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
64a0: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
64b0: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
64c0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
64d0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
64e0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
64f0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
6500: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
6510: 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72      goto vdbe_er
6520: 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a  ror_halt;.    }.
6530: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20    }.#endif.  .  
6540: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6550: 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50  ode:  Gosub P1 P
6560: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
6570: 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
6580: 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67  address onto reg
6590: 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20  ister P1.** and 
65a0: 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64  then jump to add
65b0: 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ress P2..*/.case
65c0: 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20   OP_Gosub: {    
65d0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
65e0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
65f0: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
6600: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
6610: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e  Cursor) );.  pIn
6620: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6630: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64  1];.  assert( Vd
6640: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e  beMemDynamic(pIn
6650: 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62  1)==0 );.  memAb
6660: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
6670: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  In1);.  pIn1->fl
6680: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6690: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
66a0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
66b0: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
66c0: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
66d0: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
66e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
66f0: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
6700: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6710: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6720: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6730: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6740: 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74   P1.  After.** t
6750: 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65  he jump, registe
6760: 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64  r P1 becomes und
6770: 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  efined..*/.case 
6780: 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20  OP_Return: {    
6790: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
67a0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
67b0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
67c0: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
67d0: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63  =MEM_Int );.  pc
67e0: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
67f0: 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  i;.  pIn1->flags
6800: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
6810: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6820: 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72   Opcode: InitCor
6830: 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20  outine P1 P2 P3 
6840: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70  * *.**.** Set up
6850: 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20   register P1 so 
6860: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65  that it will Yie
6870: 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74  ld to the corout
6880: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
6890: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
68a0: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
68b0: 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  n the coroutine 
68c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
68d0: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
68e0: 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  ws.** this opcod
68f0: 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72  e.  So jump over
6900: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
6910: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
6920: 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a  .** address P2..
6930: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
6940: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  EndCoroutine.*/.
6950: 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f  case OP_InitCoro
6960: 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20  utine: {     /* 
6970: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
6980: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20  ( pOp->p1>0 &&  
6990: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
69a0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
69b0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
69c0: 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32  p2>=0 && pOp->p2
69d0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73  <p->nOp );.  ass
69e0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
69f0: 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f  && pOp->p3<p->nO
6a00: 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p );.  pOut = &a
6a10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6a20: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
6a30: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b  Dynamic(pOut) );
6a40: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
6a50: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f  Op->p3 - 1;.  pO
6a60: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
6a70: 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Int;.  if( pOp->
6a80: 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  p2 ) pc = pOp->p
6a90: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6aa0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45  }../* Opcode:  E
6ab0: 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a  ndCoroutine P1 *
6ac0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
6ad0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
6ae0: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6af0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20  egister P1 is a 
6b00: 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74  Yield..** Jump t
6b10: 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74  o the P2 paramet
6b20: 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64  er of that Yield
6b30: 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a  ..** After the j
6b40: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
6b50: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
6b60: 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
6b70: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
6b80: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64  e.*/.case OP_End
6b90: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
6ba0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6bb0: 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c  .  VdbeOp *pCall
6bc0: 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  er;.  pIn1 = &aM
6bd0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6be0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
6bf0: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
6c00: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75   assert( pIn1->u
6c10: 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75  .i>=0 && pIn1->u
6c20: 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  .i<p->nOp );.  p
6c30: 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49  Caller = &aOp[pI
6c40: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65  n1->u.i];.  asse
6c50: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63  rt( pCaller->opc
6c60: 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b  ode==OP_Yield );
6c70: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
6c80: 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61  er->p2>=0 && pCa
6c90: 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20  ller->p2<p->nOp 
6ca0: 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65  );.  pc = pCalle
6cb0: 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e  r->p2 - 1;.  pIn
6cc0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
6cd0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
6ce0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6cf0: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
6d00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
6d10: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
6d20: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
6d30: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
6d40: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
6d50: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
6d60: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
6d70: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
6d80: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
6d90: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
6da0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
6db0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
6dc0: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
6dd0: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
6de0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
6df0: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
6e00: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
6e10: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
6e20: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
6e30: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
6e40: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
6e50: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
6e60: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
6e70: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
6e80: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
6e90: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6ea0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6eb0: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
6ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
6ed0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
6ee0: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
6ef0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6f00: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
6f10: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
6f20: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
6f30: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6f40: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
6f50: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
6f60: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6f70: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6f80: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6f90: 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65   = pcDest;.  bre
6fa0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6fb0: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
6fc0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
6fd0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
6fe0: 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a  [P3]=null halt.*
6ff0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
7000: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7010: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
7020: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
7030: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
7040: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
7050: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
7060: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
7070: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
7080: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7090: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
70a0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
70b0: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
70c0: 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
70d0: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a  er should be 1..
70e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
70f0: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
7100: 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
7110: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
7120: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
7130: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
7140: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
7150: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
7160: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
7170: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
7180: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
7190: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
71a0: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
71b0: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
71c0: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
71d0: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
71e0: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
71f0: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
7200: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
7210: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
7220: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
7230: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
7240: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
7250: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
7260: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
7270: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
7280: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
7290: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
72a0: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
72b0: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
72c0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
72d0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
72e0: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
72f0: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
7300: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
7310: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
7320: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
7330: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
7340: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
7350: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
7360: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
7370: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
7380: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
7390: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
73a0: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
73b0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
73c0: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
73d0: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
73e0: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
73f0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
7400: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
7410: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
7420: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
7430: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
7440: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
7450: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
7460: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
7470: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
7480: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
7490: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
74a0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
74b0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
74c0: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
74d0: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
74e0: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
74f0: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
7500: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
7510: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
7520: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
7530: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
7540: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
7550: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
7560: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
7570: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
7580: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
7590: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
75a0: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
75b0: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
75c0: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
75d0: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
75e0: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
75f0: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
7600: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
7610: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
7620: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63 6f   OP_Halt: {.  co
7630: 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
7640: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
7650: 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20 70  LogFmt;..  if( p
7660: 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f  Op->p1==SQLITE_O
7670: 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29  K && p->pFrame )
7680: 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68  {.    /* Halt th
7690: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52  e sub-program. R
76a0: 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f  eturn control to
76b0: 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
76c0: 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72  e. */.    VdbeFr
76d0: 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d  ame *pFrame = p-
76e0: 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e  >pFrame;.    p->
76f0: 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d  pFrame = pFrame-
7700: 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d  >pParent;.    p-
7710: 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73  >nFrame--;.    s
7720: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
7730: 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
7740: 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73  nge);.    pc = s
7750: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
7760: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
7770: 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20      lastRowid = 
7780: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
7790: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
77a0: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
77b0: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
77c0: 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50  n pc is the OP_P
77d0: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
77e0: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
77f0: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
7800: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
7810: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
7820: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7830: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
7840: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
7850: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
7860: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
7870: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
7880: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
7890: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
78a0: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
78b0: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
78c0: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
78d0: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
78e0: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
78f0: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
7900: 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e  /.      pc = p->
7910: 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20  aOp[pc].p2-1;.  
7920: 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d    }.    aOp = p-
7930: 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d  >aOp;.    aMem =
7940: 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72   p->aMem;.    br
7950: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63  eak;.  }.  p->rc
7960: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
7970: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
7980: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
7990: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20  >pc = pc;.  if( 
79a0: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28  p->rc ){.    if(
79b0: 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
79c0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
79d0: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79  har * const azTy
79e0: 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55  pe[] = { "NOT NU
79f0: 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22  LL", "UNIQUE", "
7a00: 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20  CHECK",.        
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a30: 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45       "FOREIGN KE
7a40: 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65  Y" };.      asse
7a50: 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26  rt( pOp->p5>=1 &
7a60: 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a  & pOp->p5<=4 );.
7a70: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7a80: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7a90: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7aa0: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7ab0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7ac0: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
7ad0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7ae0: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54  5==4 );.      zT
7af0: 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70  ype = azType[pOp
7b00: 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c  ->p5-1];.    }el
7b10: 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20  se{.      zType 
7b20: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  = 0;.    }.    a
7b30: 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20  ssert( zType!=0 
7b40: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  || pOp->p4.z!=0 
7b50: 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d  );.    zLogFmt =
7b60: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
7b70: 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20   [%s]: %s";.    
7b80: 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70  if( zType && pOp
7b90: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7ba0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7bb0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7bc0: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7bd0: 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a 20   failed: %s", . 
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bf0: 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f 70        zType, pOp
7c00: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c  ->p4.z);.    }el
7c10: 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  se if( pOp->p4.z
7c20: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7c30: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
7c40: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
7c50: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
7c60: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
7c70: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
7c80: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
7c90: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7ca0: 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b  failed", zType);
7cb0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
7cc0: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
7cd0: 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d 3e  zLogFmt, pc, p->
7ce0: 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
7cf0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
7d00: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
7d10: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
7d20: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
7d30: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7d40: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
7d50: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
7d60: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
7d70: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
7d80: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
7d90: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
7da0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7db0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
7dc0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
7dd0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7de0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7df0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
7e00: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
7e10: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
7e20: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
7e30: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
7e40: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
7e50: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
7e60: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
7e70: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
7e80: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
7e90: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
7ea0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
7eb0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
7ec0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
7ed0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7ee0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
7ef0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
7f00: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7f10: 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
7f20: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
7f30: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7f40: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
7f50: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
7f60: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
7f70: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7f80: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
7f90: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
7fa0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
7fb0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7fc0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
7fd0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
7fe0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7ff0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8000: 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a  ->p4.pI64!=0 );.
8010: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
8020: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
8030: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
8040: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
8050: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
8060: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
8070: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8080: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
8090: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
80a0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
80b0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
80c0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
80d0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
80e0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
80f0: 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20  ase OP_Real: {  
8100: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8110: 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f  e as TK_FLOAT, o
8120: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
8130: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
8140: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
8150: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
8160: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
8170: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  al) );.  pOut->u
8180: 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  .r = *pOp->p4.pR
8190: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
81a0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
81b0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
81c0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
81d0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a  is: r[P2]='P4'.*
81e0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
81f0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
8200: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
8210: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
8220: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
8230: 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 62 65  into a String be
8240: 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75  fore it is execu
8250: 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73  ted for the firs
8260: 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a  t time.  During.
8270: 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72  ** this transfor
8280: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67  mation, the leng
8290: 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20  th of string P4 
82a0: 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20  is computed and 
82b0: 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65  stored.** as the
82c0: 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a   P1 parameter..*
82d0: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
82e0: 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  8: {         /* 
82f0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e  same as TK_STRIN
8300: 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  G, out2-prerelea
8310: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
8320: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
8330: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
8340: 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70  OP_String;.  pOp
8350: 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74  ->p1 = sqlite3St
8360: 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a  rlen30(pOp->p4.z
8370: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
8380: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
8390: 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51  if( encoding!=SQ
83a0: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
83b0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
83c0: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
83d0: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
83e0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
83f0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8400: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
8410: 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f  TOOBIG ) goto to
8420: 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53  o_big;.    if( S
8430: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
8440: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
8450: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
8460: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
8470: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
8480: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
8490: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
84a0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
84b0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
84c0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
84d0: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
84e0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
84f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8500: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8510: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8520: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8530: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
8540: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
8550: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
8560: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
8570: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
8580: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
8590: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
85a0: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
85b0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
85c0: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
85d0: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
85e0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
85f0: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
8600: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
8610: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
8620: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
8630: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
8640: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
8650: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8660: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
8670: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
8680: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
8690: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
86a0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
86b0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
86c0: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
86d0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
86e0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
86f0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
8700: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
8710: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
8720: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
8730: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f  ;.  pOut->z = pO
8740: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d  p->p4.z;.  pOut-
8750: 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  >n = pOp->p1;.  
8760: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
8770: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
8780: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
8790: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
87a0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
87b0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
87c0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e  ynopsis:  r[P2..
87d0: 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57  P3]=NULL.**.** W
87e0: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
87f0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20   registers P2.  
8800: 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68  If P3 greater th
8810: 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f  an P2, then also
8820: 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69   write.** NULL i
8830: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
8840: 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74  and every regist
8850: 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32  er in between P2
8860: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a   and P3.  If P3.
8870: 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
8880: 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33  P2 (typically P3
8890: 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f   is zero) then o
88a0: 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20  nly register P2 
88b0: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c  is.** set to NUL
88c0: 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  L..**.** If the 
88d0: 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P1 value is non-
88e0: 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20  zero, then also 
88f0: 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61  set the MEM_Clea
8900: 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74  red flag so that
8910: 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  .** NULL values 
8920: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65  will not compare
8930: 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53   equal even if S
8940: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
8950: 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20  set on.** OP_Ne 
8960: 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73  or OP_Eq..*/.cas
8970: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
8980: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8990: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
89a0: 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75  nt cnt;.  u16 nu
89b0: 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20  llFlag;.  cnt = 
89c0: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
89d0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
89e0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
89f0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8a00: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
8a10: 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f  Flag = pOp->p1 ?
8a20: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43   (MEM_Null|MEM_C
8a30: 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75  leared) : MEM_Nu
8a40: 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74  ll;.  while( cnt
8a50: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
8a60: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
8a70: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
8a80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8a90: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
8aa0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
8ab0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
8ac0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
8ad0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8ae0: 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20  de: SoftNull P1 
8af0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  * * * *.** Synop
8b00: 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c  sis:  r[P1]=NULL
8b10: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73  .**.** Set regis
8b20: 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74  ter P1 to have t
8b30: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73  he value NULL as
8b40: 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f   seen by the OP_
8b50: 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e  MakeRecord.** in
8b60: 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64  struction, but d
8b70: 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73  o not free any s
8b80: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65  tring or blob me
8b90: 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20  mory associated 
8ba0: 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69  with.** the regi
8bb0: 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66  ster, so that if
8bc0: 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61   the value was a
8bd0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
8be0: 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76  that was.** prev
8bf0: 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73  iously copied us
8c00: 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68  ing OP_SCopy, th
8c10: 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f  e copies will co
8c20: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c  ntinue to be val
8c30: 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  id..*/.case OP_S
8c40: 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73  oftNull: {.  ass
8c50: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
8c60: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
8c70: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8c80: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
8c90: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
8ca0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75  ut->flags = (pOu
8cb0: 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c  t->flags|MEM_Nul
8cc0: 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  l)&~MEM_Undefine
8cd0: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
8ce0: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
8cf0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
8d00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8d10: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
8d20: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
8d30: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
8d40: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
8d50: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
8d60: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
8d70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
8d80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
8d90: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
8da0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
8db0: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
8dc0: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
8dd0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8de0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
8df0: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
8e00: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
8e10: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
8e20: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8e30: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
8e40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8e50: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
8e60: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
8e70: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
8e80: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
8e90: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
8ea0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
8eb0: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
8ec0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8ed0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
8ee0: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
8ef0: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
8f00: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
8f10: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
8f20: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
8f30: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
8f40: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
8f50: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
8f60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8f70: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8f80: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
8f90: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
8fa0: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
8fb0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
8fc0: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
8fd0: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
8fe0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8ff0: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9000: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
9010: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
9020: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
9030: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
9040: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
9050: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
9060: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
9070: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
9080: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9090: 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f  pOut, pVar, MEM_
90a0: 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54  Static);.  UPDAT
90b0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
90c0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
90d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
90e0: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
90f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
9100: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
9110: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
9120: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
9130: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
9140: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
9150: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
9160: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
9170: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
9180: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
9190: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
91a0: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
91b0: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
91c0: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
91d0: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
91e0: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
91f0: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
9200: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
9210: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
9220: 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20  ve: {.  int n;  
9230: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9240: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
9250: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
9260: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
9270: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9280: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
9290: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
92a0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
92b0: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
92c0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
92d0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
92e0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
92f0: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
9300: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
9310: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
9320: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
9330: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9340: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
9350: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
9360: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
9370: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
9380: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9390: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c     assert( pIn1<
93a0: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
93b0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
93c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
93d0: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
93e0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
93f0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
9400: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9410: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
9420: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9430: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
9440: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
9450: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
9460: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26  ut->pScopyFrom<&
9470: 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d  aMem[p1+pOp->p3]
9480: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
9490: 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31  pScopyFrom += p1
94a0: 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20   - pOp->p2;.    
94b0: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  }.#endif.    REG
94c0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
94d0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
94e0: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
94f0: 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29  .  }while( --n )
9500: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9510: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
9520: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9530: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b  nopsis: r[P2@P3+
9540: 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a  1]=r[P1@P3+1].**
9550: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
9560: 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e  of registers P1.
9570: 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69  .P1+P3 into regi
9580: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e  sters P2..P2+P3.
9590: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
95a0: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
95b0: 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65  deep copy of the
95c0: 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69   value.  A dupli
95d0: 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20  cate.** is made 
95e0: 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  of any string or
95f0: 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20   blob constant. 
9600: 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f   See also OP_SCo
9610: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  py..*/.case OP_C
9620: 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  opy: {.  int n;.
9630: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
9640: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9650: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
9660: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9670: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
9680: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c  !=pIn1 );.  whil
9690: 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  e( 1 ){.    sqli
96a0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
96b0: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
96c0: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
96d0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
96e0: 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53  (pOut);.#ifdef S
96f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
9700: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9710: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20   = 0;.#endif.   
9720: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9730: 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d  pOp->p2+pOp->p3-
9740: 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66  n, pOut);.    if
9750: 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65  ( (n--)==0 ) bre
9760: 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ak;.    pOut++;.
9770: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
9780: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9790: 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20  pcode: SCopy P1 
97a0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
97b0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
97c0: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  ].**.** Make a s
97d0: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
97e0: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
97f0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
9800: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9810: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
9820: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
9830: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
9840: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
9850: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
9860: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
9870: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
9880: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
9890: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
98a0: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
98b0: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
98c0: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
98d0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
98e0: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
98f0: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
9900: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
9910: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
9920: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
9930: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
9940: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
9950: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
9960: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
9970: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
9980: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
9990: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
99a0: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
99b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
99c0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
99d0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
99e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
99f0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
9a00: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
9a10: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
9a20: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9a30: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9a40: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9a50: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74  DEBUG.  if( pOut
9a60: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20  ->pScopyFrom==0 
9a70: 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ) pOut->pScopyFr
9a80: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69  om = pIn1;.#endi
9a90: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
9aa0: 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52   Opcode: ResultR
9ab0: 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ow P1 P2 * * *.*
9ac0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74  * Synopsis:  out
9ad0: 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a  put=r[P1@P2].**.
9ae0: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
9af0: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
9b00: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
9b10: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
9b20: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
9b30: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
9b40: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
9b50: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
9b60: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
9b70: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
9b80: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
9b90: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
9ba0: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
9bb0: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
9bc0: 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72   to the r(P1)..r
9bd0: 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73  (P1+P2-1) values
9be0: 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
9bf0: 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f  t row..*/.case O
9c00: 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20  P_ResultRow: {. 
9c10: 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e   Mem *pMem;.  in
9c20: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
9c30: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f  ->nResColumn==pO
9c40: 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72  p->p2 );.  asser
9c50: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
9c60: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9c70: 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  1+pOp->p2<=(p->n
9c80: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
9c90: 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  1 );..#ifndef SQ
9ca0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
9cb0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
9cc0: 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73   Run the progres
9cd0: 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62  s counter just b
9ce0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
9cf0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
9d00: 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20  xProgress!=0.   
9d10: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
9d20: 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26  gressLimit.   &&
9d30: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
9d40: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
9d50: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20  !=0.  ){.    rc 
9d60: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
9d70: 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62  PT;.    goto vdb
9d80: 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20  e_error_halt;.  
9d90: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49  }.#endif..  /* I
9da0: 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74  f this statement
9db0: 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d   has violated im
9dc0: 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
9dd0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  key constraints,
9de0: 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74   do.  ** not ret
9df0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
9e00: 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e  f rows modified.
9e10: 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45   And do not RELE
9e20: 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ASE the statemen
9e30: 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  t.  ** transacti
9e40: 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20  on. It needs to 
9e50: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
9e60: 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45   */.  if( SQLITE
9e70: 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74  _OK!=(rc = sqlit
9e80: 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
9e90: 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65   0)) ){.    asse
9ea0: 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51  rt( db->flags&SQ
9eb0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
9ec0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
9ed0: 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
9ee0: 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   );.    break;. 
9ef0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
9f00: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9f10: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
9f20: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61  sqlite3.flags ma
9f30: 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44  sk, then .  ** D
9f40: 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  ML statements in
9f50: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
9f60: 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e   to return the n
9f70: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20  umber of rows . 
9f80: 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   ** modified to 
9f90: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
9fa0: 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74  s the only way t
9fb0: 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20  hat a VM that.  
9fc0: 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65  ** opens a state
9fd0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
9fe0: 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73   may invoke this
9ff0: 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20   opcode..  **.  
a000: 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20  ** In case this 
a010: 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d  is such a statem
a020: 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73  ent, close any s
a030: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a040: 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64  tion.  ** opened
a050: 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f   by this VM befo
a060: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e  re returning con
a070: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72  trol to the user
a080: 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a  . This is to.  *
a090: 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74  * ensure that st
a0a0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
a0b0: 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20  ions are always 
a0c0: 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72  nested, not over
a0d0: 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66  lapping..  ** If
a0e0: 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d   the open statem
a0f0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent-transaction 
a100: 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65  is not closed he
a110: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65  re, then the use
a120: 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20  r.  ** may step 
a130: 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20  another VM that 
a140: 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74  opens its own st
a150: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a160: 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d  ion. This.  ** m
a170: 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c  ay lead to overl
a180: 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  apping statement
a190: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20   transactions.. 
a1a0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61   **.  ** The sta
a1b0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a1c0: 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f  on is never a to
a1d0: 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74  p-level transact
a1e0: 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a  ion.  Hence.  **
a1f0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c   the RELEASE cal
a200: 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65  l below can neve
a210: 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61  r fail..  */.  a
a220: 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65  ssert( p->iState
a230: 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66  ment==0 || db->f
a240: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
a250: 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20  tRows );.  rc = 
a260: 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65  sqlite3VdbeClose
a270: 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56  Statement(p, SAV
a280: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b  EPOINT_RELEASE);
a290: 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
a2a0: 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20  =SQLITE_OK) ){. 
a2b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
a2c0: 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
a2d0: 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ll ephemeral cur
a2e0: 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a  sor row caches *
a2f0: 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20  /.  p->cacheCtr 
a300: 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b  = (p->cacheCtr +
a310: 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b   2)|1;..  /* Mak
a320: 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c  e sure the resul
a330: 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ts of the curren
a340: 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74  t row are \000 t
a350: 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61  erminated.  ** a
a360: 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67  nd have an assig
a370: 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72  ned type.  The r
a380: 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70  esults are de-ep
a390: 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20  hemeralized as. 
a3a0: 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63   ** a side effec
a3b0: 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d  t..  */.  pMem =
a3c0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
a3d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a3e0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
a3f0: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
a400: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
a410: 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b  lid(&pMem[i]) );
a420: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
a430: 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ize(&pMem[i]);. 
a440: 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
a450: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  [i].flags & MEM_
a460: 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20  Ephem)==0.      
a470: 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69        || (pMem[i
a480: 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ].flags & (MEM_S
a490: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
a4a0: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
a4b0: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
a4c0: 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  te(&pMem[i]);.  
a4d0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
a4e0: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
a4f0: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
a500: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
a510: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
a520: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
a530: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
a540: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
a550: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
a560: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
a570: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
a580: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
a590: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a5a0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
a5b0: 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P1].**.** Ad
a5c0: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
a5d0: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
a5e0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
a5f0: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
a600: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
a610: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
a620: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
a630: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
a640: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
a650: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
a660: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
a670: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
a680: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
a690: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
a6a0: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
a6b0: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
a6c0: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
a6d0: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
a6e0: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
a6f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
a700: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
a710: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
a720: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
a730: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
a740: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
a750: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a760: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
a770: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
a780: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
a790: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
a7a0: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
a7b0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
a7c0: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
a7d0: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
a7e0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
a7f0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
a800: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
a810: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
a820: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
a830: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
a840: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
a850: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
a860: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
a870: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
a880: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
a890: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
a8a0: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
a8b0: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
a8c0: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
a8d0: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
a8e0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
a8f0: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
a900: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28  o_big;.  }.  if(
a910: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
a920: 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
a930: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
a940: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
a950: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65  no_mem;.  }.  Me
a960: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a970: 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69  t, MEM_Str);.  i
a980: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
a990: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
a9a0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
a9b0: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
a9c0: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
a9d0: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
a9e0: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
a9f0: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20  t->z[nByte]=0;. 
aa00: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
aa10: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
aa20: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
aa30: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
aa40: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
aa50: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
aa60: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
aa70: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
aa80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
aa90: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
aaa0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
aab0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  is:  r[P3]=r[P1]
aac0: 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P2].**.** Add
aad0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
aae0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
aaf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ab00: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
ab10: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
ab20: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
ab30: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
ab40: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
ab50: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
ab60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
ab70: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
ab80: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
ab90: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32  r[P3]=r[P1]*r[P2
aba0: 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  ].**.**.** Multi
abb0: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
abc0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
abd0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
abe0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
abf0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
ac00: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
ac10: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
ac20: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
ac30: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
ac40: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
ac50: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
ac60: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ac70: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  :  r[P3]=r[P2]-r
ac80: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
ac90: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
aca0: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
acb0: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
acc0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
acd0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
ace0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
acf0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
ad00: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
ad10: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
ad20: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
ad30: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
ad40: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ad50: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72  :  r[P3]=r[P2]/r
ad60: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64  [P1].**.** Divid
ad70: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
ad80: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
ad90: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ada0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
adb0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
adc0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
add0: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
ade0: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
adf0: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
ae00: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
ae10: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
ae20: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
ae30: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
ae40: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
ae50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
ae60: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
ae70: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
ae80: 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31  r[P3]=r[P2]%r[P1
ae90: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ].**.** Compute 
aea0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
aeb0: 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69  ter integer regi
aec0: 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64  ster P2 is divid
aed0: 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74  ed by .** regist
aee0: 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20  er P1 and store 
aef0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
af00: 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49  gister P3. .** I
af10: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
af20: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
af30: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
af40: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
af50: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
af60: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
af70: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
af80: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
af90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
afa0: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
afb0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
afc0: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
afd0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
afe0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
aff0: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
b000: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
b010: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
b020: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b030: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
b040: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b050: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
b060: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b070: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
b080: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b090: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
b0a0: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
b0b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
b0c0: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
b0d0: 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e  t3 */.  char bIn
b0e0: 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74  tint;   /* Start
b0f0: 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e  ed out as two in
b100: 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  teger operands *
b110: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
b120: 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20      /* Combined 
b130: 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d  MEM_* flags from
b140: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a   both inputs */.
b150: 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20    u16 type1;    
b160: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
b170: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
b180: 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32  d */.  u16 type2
b190: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
b1a0: 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20  c type of right 
b1b0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
b1c0: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
b1d0: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
b1e0: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
b1f0: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
b200: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
b210: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b220: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
b230: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
b240: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
b250: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
b260: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
b270: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
b280: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
b290: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b2a0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31  Op->p1];.  type1
b2b0: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
b2c0: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
b2d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b2e0: 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63   type2 = numeric
b2f0: 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f  Type(pIn2);.  pO
b300: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b310: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
b320: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
b330: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
b340: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
b350: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
b360: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
b370: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74  s_null;.  if( (t
b380: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
b390: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
b3a0: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
b3b0: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
b3c0: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
b3d0: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
b3e0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
b3f0: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
b400: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
b410: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
b420: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
b430: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
b440: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
b450: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
b460: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
b470: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
b480: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
b490: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
b4a0: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
b4b0: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
b4c0: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
b4d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b4e0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
b4f0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b500: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b510: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b520: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b530: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
b540: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
b550: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
b560: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
b570: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
b580: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
b590: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
b5a0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
b5b0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
b5c0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
b5d0: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
b5e0: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
b5f0: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
b600: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b610: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
b620: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
b630: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
b640: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
b650: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74   }else{.    bInt
b660: 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68  int = 0;.fp_math
b670: 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74  :.    rA = sqlit
b680: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
b690: 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20  pIn1);.    rB = 
b6a0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
b6b0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
b6c0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
b6d0: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
b6e0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b6f0: 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20    rB += rA;     
b700: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b710: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
b720: 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20      rB -= rA;   
b730: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b740: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
b750: 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20  y:    rB *= rA; 
b760: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b770: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
b780: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e: {.        /* 
b790: 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73  (double)0 In cas
b7a0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e of SQLITE_OMIT
b7b0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e  _FLOATING_POINT.
b7c0: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  .. */.        if
b7d0: 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20  ( rA==(double)0 
b7e0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
b7f0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
b800: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20  ;.        rB /= 
b810: 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  rA;.        brea
b820: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
b830: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
b840: 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41      iA = (i64)rA
b850: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28  ;.        iB = (
b860: 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20  i64)rB;.        
b870: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
b880: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
b890: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
b8a0: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
b8b0: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
b8c0: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
b8d0: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
b8e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b8f0: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
b900: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
b910: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
b920: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
b930: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
b940: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
b950: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
b960: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
b970: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
b980: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b990: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
b9a0: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
b9b0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
b9c0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
b9d0: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74  al);.    if( ((t
b9e0: 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f  ype1|type2)&MEM_
b9f0: 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e  Real)==0 && !bIn
ba00: 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  tint ){.      sq
ba10: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
ba20: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
ba30: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
ba40: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
ba50: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
ba60: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
ba70: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
ba80: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
ba90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
baa0: 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a  Seq P1 * * P4.**
bab0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
bac0: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
bad0: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
bae0: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
baf0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
bb00: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
bb10: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
bb20: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
bb30: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
bb40: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
bb50: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
bb60: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
bb70: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
bb80: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
bb90: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
bba0: 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
bbb0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
bbc0: 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
bbd0: 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d  t a subsequent m
bbe0: 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29  in() or.** max()
bbf0: 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20   aggregate will 
bc00: 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20  set to 1 if the 
bc10: 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e  current row is n
bc20: 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ot the minimum o
bc30: 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54  r.** maximum.  T
bc40: 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69  he P1 register i
bc50: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
bc60: 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72   0 by this instr
bc70: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
bc80: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
bc90: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
bca0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
bcb0: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
bcc0: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
bcd0: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
bce0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
bcf0: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
bd00: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
bd10: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e  .** publicly, on
bd20: 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ly to user funct
bd30: 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ions defined in 
bd40: 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20  func.c..*/.case 
bd50: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
bd60: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
bd70: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
bd80: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
bd90: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
bda0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
bdb0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
bdc0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
bdd0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
bde0: 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  nction P1 P2 P3 
bdf0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
be00: 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b  s: r[P3]=func(r[
be10: 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e  P2@P5]).**.** In
be20: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
be30: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
be40: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
be50: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
be60: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
be70: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
be80: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
be90: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
bea0: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
beb0: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
bec0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
bed0: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
bee0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
bef0: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
bf00: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
bf10: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
bf20: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
bf30: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
bf40: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
bf50: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
bf60: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
bf70: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
bf80: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
bf90: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
bfa0: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
bfb0: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
bfc0: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
bfd0: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
bfe0: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
bff0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
c000: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
c010: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
c020: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
c030: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
c040: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
c050: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
c060: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
c070: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
c080: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
c090: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
c0a0: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
c0b0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
c0c0: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
c0d0: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
c0e0: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
c0f0: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
c100: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
c110: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
c120: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
c130: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
c140: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61   pOp->p5;.  apVa
c150: 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  l = p->apArg;.  
c160: 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c  assert( apVal ||
c170: 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72   n==0 );.  asser
c180: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
c190: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
c1a0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
c1b0: 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26 61  .  ctx.pOut = &a
c1c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
c1d0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
c1e0: 28 70 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a 0a  (p, ctx.pOut);..
c1f0: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
c200: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
c210: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
c220: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
c230: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
c240: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
c250: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
c260: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20  >p2+n );.  pArg 
c270: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
c280: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
c290: 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a  ; i++, pArg++){.
c2a0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
c2b0: 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a  sValid(pArg) );.
c2c0: 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
c2d0: 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  Arg;.    Deephem
c2e0: 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20  eralize(pArg);. 
c2f0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
c300: 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72  E(pOp->p2+i, pAr
c310: 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  g);.  }..  asser
c320: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
c330: 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20  P4_FUNCDEF );.  
c340: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
c350: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78  >p4.pFunc;.  ctx
c360: 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78  .iOp = pc;.  ctx
c370: 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 4d 65  .pVdbe = p;.  Me
c380: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 63 74 78  mSetTypeFlag(ctx
c390: 2e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  .pOut, MEM_Null)
c3a0: 3b 0a 20 20 63 74 78 2e 66 45 72 72 6f 72 4f 72  ;.  ctx.fErrorOr
c3b0: 41 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c  Aux = 0;.  db->l
c3c0: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
c3d0: 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46  owid;.  (*ctx.pF
c3e0: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
c3f0: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
c400: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
c410: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
c420: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
c430: 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20  d;  /* Remember 
c440: 72 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61  rowid changes ma
c450: 64 65 20 62 79 20 78 46 75 6e 63 20 2a 2f 0a 0a  de by xFunc */..
c460: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
c470: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
c480: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
c490: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
c4a0: 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f 72  if( ctx.fErrorOr
c4b0: 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 63  Aux ){.    if( c
c4c0: 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
c4d0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
c4e0: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
c4f0: 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
c500: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 63  te3_value_text(c
c510: 74 78 2e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20  tx.pOut));.     
c520: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
c530: 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  r;.    }.    sql
c540: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
c550: 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70  xData(p, pc, pOp
c560: 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ->p1);.  }..  /*
c570: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
c580: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c590: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
c5a0: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
c5b0: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
c5c0: 28 63 74 78 2e 70 4f 75 74 2c 20 65 6e 63 6f 64  (ctx.pOut, encod
c5d0: 69 6e 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ing);.  if( sqli
c5e0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
c5f0: 28 63 74 78 2e 70 4f 75 74 29 20 29 7b 0a 20 20  (ctx.pOut) ){.  
c600: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
c610: 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f    }..  REGISTER_
c620: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 63  TRACE(pOp->p3, c
c630: 74 78 2e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  tx.pOut);.  UPDA
c640: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
c650: 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 62 72 65  ctx.pOut);.  bre
c660: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c670: 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50  : BitAnd P1 P2 P
c680: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
c690: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  s:  r[P3]=r[P1]&
c6a0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
c6b0: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
c6c0: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
c6d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
c6e0: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
c6f0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c700: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c710: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c720: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c730: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c740: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
c750: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
c760: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
c770: 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a  3]=r[P1]|r[P2].*
c780: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
c790: 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65  t-wise OR of the
c7a0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
c7b0: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
c7c0: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
c7d0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
c7e0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
c7f0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
c800: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
c810: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
c820: 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31  de: ShiftLeft P1
c830: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c840: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
c850: 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]<<r[P1].**.*
c860: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
c870: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
c880: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
c890: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
c8a0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
c8b0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
c8c0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
c8d0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
c8e0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
c8f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
c900: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
c910: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
c920: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
c930: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
c940: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
c950: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
c960: 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31  [P3]=r[P2]>>r[P1
c970: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
c980: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
c990: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
c9a0: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
c9b0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
c9c0: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
c9d0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
c9e0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
c9f0: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
ca00: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
ca10: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
ca20: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
ca30: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ca40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
ca50: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
ca60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ca70: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
ca80: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ca90: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cab0: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
cac0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cad0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cae0: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
caf0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cb00: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
cb10: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cb20: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
cb30: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
cb40: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
cb50: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cb60: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20   */.  i64 iA;.  
cb70: 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42  u64 uA;.  i64 iB
cb80: 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49  ;.  u8 op;..  pI
cb90: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cba0: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
cbb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
cbc0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
cbd0: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
cbe0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
cbf0: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
cc00: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
cc10: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
cc20: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
cc30: 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71  k;.  }.  iA = sq
cc40: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
cc50: 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20  e(pIn2);.  iB = 
cc60: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
cc70: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20  lue(pIn1);.  op 
cc80: 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
cc90: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41   if( op==OP_BitA
cca0: 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20  nd ){.    iA &= 
ccb0: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
ccc0: 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a  op==OP_BitOr ){.
ccd0: 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20      iA |= iB;.  
cce0: 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20  }else if( iB!=0 
ccf0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  ){.    assert( o
cd00: 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74  p==OP_ShiftRight
cd10: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
cd20: 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  Left );..    /* 
cd30: 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61  If shifting by a
cd40: 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74   negative amount
cd50: 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f  , shift in the o
cd60: 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a  ther direction *
cd70: 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29  /.    if( iB<0 )
cd80: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
cd90: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f  OP_ShiftRight==O
cda0: 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b  P_ShiftLeft+1 );
cdb0: 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50  .      op = 2*OP
cdc0: 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d  _ShiftLeft + 1 -
cdd0: 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20   op;.      iB = 
cde0: 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a  iB>(-64) ? -iB :
cdf0: 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   64;.    }..    
ce00: 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20  if( iB>=64 ){.  
ce10: 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20      iA = (iA>=0 
ce20: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
ce30: 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20  eft) ? 0 : -1;. 
ce40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ce50: 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c  memcpy(&uA, &iA,
ce60: 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20   sizeof(uA));.  
ce70: 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53      if( op==OP_S
ce80: 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20  hiftLeft ){.    
ce90: 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20      uA <<= iB;. 
cea0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
ceb0: 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20      uA >>= iB;. 
cec0: 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65         /* Sign-e
ced0: 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74  xtend on a right
cee0: 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61   shift of a nega
cef0: 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  tive number */. 
cf00: 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20         if( iA<0 
cf10: 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29  ) uA |= ((((u64)
cf20: 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0xffffffff)<<32)
cf30: 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20  |0xffffffff) << 
cf40: 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d  (64-iB);.      }
cf50: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69  .      memcpy(&i
cf60: 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69  A, &uA, sizeof(i
cf70: 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  A));.    }.  }. 
cf80: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b   pOut->u.i = iA;
cf90: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
cfa0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
cfb0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
cfc0: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
cfd0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
cfe0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d  Synopsis:  r[P1]
cff0: 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a  =r[P1]+P2.** .**
d000: 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e   Add the constan
d010: 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75  t P2 to the valu
d020: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d030: 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  ..** The result 
d040: 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74  is always an int
d050: 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66  eger..**.** To f
d060: 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65  orce any registe
d070: 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  r to be an integ
d080: 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a  er, just add 0..
d090: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d  */.case OP_AddIm
d0a0: 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  m: {            
d0b0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
d0c0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d0d0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
d0e0: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
d0f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
d100: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
d110: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
d120: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61   pOp->p2;.  brea
d130: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d140: 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32   MustBeInt P1 P2
d150: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f   * * *.** .** Fo
d160: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d170: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d180: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
d190: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
d1a0: 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20  in P1 is not an 
d1b0: 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e  integer and cann
d1c0: 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
d1d0: 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
d1e0: 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20  ** without data 
d1f0: 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20  loss, then jump 
d200: 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
d210: 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a  2, or if P2==0.*
d220: 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  * raise an SQLIT
d230: 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70  E_MISMATCH excep
d240: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
d250: 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20  _MustBeInt: {   
d260: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
d270: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
d280: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d290: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
d2a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
d2b0: 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
d2c0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
d2d0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
d2e0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
d2f0: 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
d300: 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ((pIn1->flags&ME
d310: 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20  M_Int)==0, 2);. 
d320: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
d330: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
d340: 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  0 ){.      if( p
d350: 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
d360: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
d370: 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20  _MISMATCH;.     
d380: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
d390: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
d3a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
d3b0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
d3c0: 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;.        break
d3d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
d3e0: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
d3f0: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
d400: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
d410: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d420: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
d430: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
d440: 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a  ealAffinity P1 *
d450: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
d460: 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64  register P1 hold
d470: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e  s an integer con
d480: 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61  vert it to a rea
d490: 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54  l value..**.** T
d4a0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
d4b0: 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69  ed when extracti
d4c0: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ng information f
d4d0: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61  rom a column tha
d4e0: 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66  t.** has REAL af
d4f0: 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f  finity.  Such co
d500: 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20  lumn values may 
d510: 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20  still be stored 
d520: 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20  as.** integers, 
d530: 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69  for space effici
d540: 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20  ency, but after 
d550: 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61  extraction we wa
d560: 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61  nt them.** to ha
d570: 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76  ve only a real v
d580: 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
d590: 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b  _RealAffinity: {
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
d5c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d5d0: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
d5e0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
d5f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
d600: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
d610: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
d620: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
d630: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d640: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
d650: 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Cast P1 P2 * * *
d660: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66  .** Synopsis: af
d670: 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a  finity(r[P1]).**
d680: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
d690: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d6a0: 50 31 20 74 6f 20 62 65 20 74 68 65 20 74 79 70  P1 to be the typ
d6b0: 65 20 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e  e defined by P2.
d6c0: 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20  .** .** <ul>.** 
d6d0: 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22 3e 20  <li value="97"> 
d6e0: 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  TEXT.** <li valu
d6f0: 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20  e="98"> BLOB.** 
d700: 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22 3e 20  <li value="99"> 
d710: 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76  NUMERIC.** <li v
d720: 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e 54 45  alue="100"> INTE
d730: 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  GER.** <li value
d740: 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20  ="101"> REAL.** 
d750: 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  </ul>.**.** A NU
d760: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d770: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d780: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d790: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d7a0: 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20  se OP_Cast: {   
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d7c0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
d7d0: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49  t( pOp->p2>=SQLI
d7e0: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 26 26 20 70  TE_AFF_NONE && p
d7f0: 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41  Op->p2<=SQLITE_A
d800: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73  FF_REAL );.  tes
d810: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
d820: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
d830: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
d840: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
d850: 46 46 5f 4e 4f 4e 45 20 29 3b 0a 20 20 74 65 73  FF_NONE );.  tes
d860: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
d870: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d880: 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  IC );.  testcase
d890: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
d8a0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b  E_AFF_INTEGER );
d8b0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
d8c0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
d8d0: 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20  _REAL );.  pIn1 
d8e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d8f0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
d900: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
d910: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
d920: 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
d930: 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e  3VdbeMemCast(pIn
d940: 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f  1, pOp->p2, enco
d950: 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
d960: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
d970: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  1);.  break;.}.#
d980: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
d990: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
d9a0: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
d9b0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
d9c0: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
d9d0: 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  <r[P3] goto P2.*
d9e0: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
d9f0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
da00: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
da10: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
da20: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
da30: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
da40: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
da50: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
da60: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
da70: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
da80: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
da90: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
daa0: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
dab0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
dac0: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
dad0: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
dae0: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
daf0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
db00: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
db10: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
db20: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
db30: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
db40: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
db50: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
db60: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
db70: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
db80: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
db90: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
dba0: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
dbb0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
dbc0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
dbd0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
dbe0: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
dbf0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
dc00: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
dc10: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
dc20: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
dc30: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
dc40: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
dc50: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
dc60: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
dc70: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
dc80: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
dc90: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
dca0: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
dcb0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
dcc0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
dcd0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
dce0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
dcf0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
dd00: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
dd10: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
dd20: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
dd30: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
dd40: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
dd50: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
dd60: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
dd70: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
dd80: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
dd90: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
dda0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
ddb0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
ddc0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
ddd0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
dde0: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
ddf0: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
de00: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
de10: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
de20: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
de30: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
de40: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
de50: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
de60: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
de70: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
de80: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
de90: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
dea0: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
deb0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
dec0: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
ded0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
dee0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
def0: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
df00: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
df10: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
df20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
df30: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
df40: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
df50: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
df60: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
df70: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
df80: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
df90: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
dfa0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
dfb0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
dfc0: 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69  ITE_NULLEQ bit i
dfd0: 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65  s set in P5, the
dfe0: 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  n NULL values ar
dff0: 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20  e considered.** 
e000: 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f  equal to one ano
e010: 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74  ther, provided t
e020: 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20  hat they do not 
e030: 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43  have their MEM_C
e040: 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65  leared.** bit se
e050: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
e060: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
e070: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e080: 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20  if r[P1]!=r[P3] 
e090: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e0a0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e0b0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e0c0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e0d0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e0e0: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e0f0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e100: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
e110: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
e120: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Lt opcode for.*
e130: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
e140: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
e150: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e160: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
e170: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e180: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e190: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e1a0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e1b0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e1c0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e1d0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e1e0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e1f0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e200: 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65  false.  If eithe
e210: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e220: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e230: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66  t is true..** If
e240: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
e250: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
e260: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
e270: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
e280: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
e290: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
e2a0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
e2b0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e2c0: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
e2d0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
e2e0: 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67  f r[P1]==r[P3] g
e2f0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
e300: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e310: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e320: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e330: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e340: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
e350: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
e360: 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61   and P3 are equa
e370: 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74  l..** See the Lt
e380: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
e390: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
e3a0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  on..**.** If SQL
e3b0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
e3c0: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
e3d0: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
e3e0: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
e3f0: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
e400: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
e410: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
e420: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
e430: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
e440: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
e450: 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20  arison is true. 
e460: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
e470: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
e480: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
e490: 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  lse..** If neith
e4a0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e4b0: 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  LL the result is
e4c0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
e4d0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
e4e0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
e4f0: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
e500: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
e510: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
e520: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e530: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
e540: 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]<=r[P3] goto P2
e550: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e560: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e570: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e580: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e590: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e5a0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
e5b0: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
e5c0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
e5d0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
e5e0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
e5f0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
e600: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
e610: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e620: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
e630: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e640: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e650: 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]>r[P3] goto
e660: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e670: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e680: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e690: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e6a0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e6b0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
e6c0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
e6d0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
e6e0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
e6f0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
e700: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
e710: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
e720: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
e730: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
e740: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e750: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
e760: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
e770: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e780: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e790: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e7a0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e7b0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e7c0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
e7d0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
e7e0: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
e7f0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
e800: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e810: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e820: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e830: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e840: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e860: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
e870: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e880: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
e890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e8a0: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
e8b0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e8c0: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
e8d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e8e0: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
e8f0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
e900: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
e910: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e920: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
e930: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
e940: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
e950: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e960: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
e970: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e980: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
e990: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e9a0: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
e9b0: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
e9c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
e9d0: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
e9e0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
e9f0: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
ea00: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
ea10: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
ea20: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
ea30: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
ea40: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
ea50: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
ea60: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
ea70: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
ea80: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
ea90: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
eaa0: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
eab0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
eac0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ead0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
eae0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
eaf0: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
eb00: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
eb10: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
eb20: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20  ;.  if( (flags1 
eb30: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75  | flags3)&MEM_Nu
eb40: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
eb50: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
eb60: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
eb70: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
eb80: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
eb90: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
eba0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
ebb0: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
ebc0: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
ebd0: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
ebe0: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
ebf0: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
ec00: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
ec10: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
ec20: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
ec30: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
ec40: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
ec50: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
ec60: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
ec70: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
ec80: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
ec90: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
eca0: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61  lags1 & MEM_Clea
ecb0: 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  red)==0 );.     
ecc0: 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
ecd0: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
ece0: 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20  FNULL)==0 );.   
ecf0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d     if( (flags1&M
ed00: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
ed10: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
ed20: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
ed30: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
ed40: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
ed50: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
ed60: 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 0;  /* Resul
ed70: 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ts are equal */.
ed80: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
ed90: 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f       res = 1;  /
eda0: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f  * Results are no
edb0: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
edc0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
edd0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
ede0: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
edf0: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
ee00: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
ee10: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
ee20: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
ee30: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
ee40: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
ee50: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
ee60: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
ee70: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
ee80: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
ee90: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
eea0: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
eeb0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
eec0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
eed0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
eee0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
eef0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
ef00: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
ef10: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
ef20: 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
ef30: 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
ef40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
ef50: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
ef60: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
ef70: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
ef80: 70 32 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a  p2-1;.        }.
ef90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
efa0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
efb0: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
efc0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
efd0: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
efe0: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
eff0: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
f000: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
f010: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
f020: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
f030: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20  NUMERIC ){.     
f040: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
f050: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
f060: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f070: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f080: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
f090: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
f0a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
f0b0: 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
f0c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
f0d0: 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
f0e0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
f0f0: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
f100: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b  ffinity(pIn3,0);
f110: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
f120: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
f130: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
f140: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
f150: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f160: 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e  _Str)==0 && (pIn
f170: 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  1->flags & (MEM_
f180: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
f190: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
f1a0: 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
f1b0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
f1c0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
f1d0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
f1e0: 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
f1f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f200: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31  emStringify(pIn1
f210: 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
f220: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
f230: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
f240: 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
f250: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
f260: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
f270: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ))!=0 ){.       
f280: 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
f290: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
f2a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
f2b0: 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
f2c0: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a  s & MEM_Real );.
f2d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
f2e0: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
f2f0: 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20  pIn3, encoding, 
f300: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
f310: 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
f320: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
f330: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
f340: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
f350: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
f360: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
f370: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f380: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  MemExpandBlob(pI
f390: 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73  n1);.      flags
f3a0: 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a  1 &= ~MEM_Zero;.
f3b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49      }.    if( pI
f3c0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
f3d0: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
f3e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
f3f0: 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
f400: 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d      flags3 &= ~M
f410: 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20  EM_Zero;.    }. 
f420: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
f430: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
f440: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 72 65 73 20 3d  o_mem;.    res =
f450: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
f460: 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70  re(pIn3, pIn1, p
f470: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20  Op->p4.pColl);. 
f480: 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70   }.  switch( pOp
f490: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
f4a0: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72  case OP_Eq:    r
f4b0: 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20  es = res==0;    
f4c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
f4d0: 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d   OP_Ne:    res =
f4e0: 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65   res!=0;     bre
f4f0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
f500: 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Lt:    res = res
f510: 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
f520: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
f530: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b     res = res<=0;
f540: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f550: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72  case OP_Gt:    r
f560: 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  es = res>0;     
f570: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
f580: 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d  ult:       res =
f590: 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65   res>=0;     bre
f5a0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
f5b0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f5c0: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70  STOREP2 ){.    p
f5d0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
f5e0: 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  >p2];.    memAbo
f5f0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
f600: 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
f610: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f620: 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
f630: 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20  ->u.i = res;.   
f640: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
f650: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
f660: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
f670: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
f680: 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
f690: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
f6a0: 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
f6b0: 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
f6c0: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  Op->p2-1;.    }.
f6d0: 20 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e    }.  /* Undo an
f6e0: 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  y changes made b
f6f0: 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  y applyAffinity(
f700: 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  ) to the input r
f710: 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70  egisters. */.  p
f720: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61  In1->flags = fla
f730: 67 73 31 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  gs1;.  pIn3->fla
f740: 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 20 20 62  gs = flags3;.  b
f750: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
f760: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
f770: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
f780: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
f790: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
f7a0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
f7b0: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
f7c0: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
f7d0: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
f7e0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
f7f0: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
f800: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
f810: 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
f820: 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
f830: 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
f840: 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
f850: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
f860: 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
f870: 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
f880: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
f890: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
f8a0: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
f8b0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
f8c0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
f8d0: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
f8e0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
f8f0: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
f900: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
f910: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f920: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
f930: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f940: 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c  psis: r[P1@P3] <
f950: 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  -> r[P2@P3].**.*
f960: 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65  * Compare two ve
f970: 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65  ctors of registe
f980: 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72  rs in reg(P1)..r
f990: 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c  eg(P1+P3-1) (cal
f9a0: 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72  l this.** vector
f9b0: 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67   "A") and in reg
f9c0: 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d  (P2)..reg(P2+P3-
f9d0: 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20  1) ("B").  Save 
f9e0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
f9f0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
fa00: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e  for use by the n
fa10: 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74  ext OP_Jump inst
fa20: 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ruct..**.** If P
fa30: 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
fa40: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
fa50: 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72  , then the order
fa60: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
fa70: 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20  s.** determined 
fa80: 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
fa90: 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  nt OP_Permutatio
faa0: 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20  n operator.  If 
fab0: 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45  the.** OPFLAG_PE
fac0: 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65  RMUTE bit is cle
fad0: 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65  ar, then registe
fae0: 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  r are compared i
faf0: 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20  n sequential.** 
fb00: 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  order..**.** P4 
fb10: 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
fb20: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
fb30: 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
fb40: 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
fb50: 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
fb60: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
fb70: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
fb80: 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
fb90: 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
fba0: 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
fbb0: 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
fbc0: 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
fbd0: 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
fbe0: 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
fbf0: 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
fc00: 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
fc10: 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
fc20: 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
fc30: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
fc40: 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
fc50: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
fc60: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
fc70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
fc80: 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
fc90: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
fca0: 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
fcb0: 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
fcc0: 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
fcd0: 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
fce0: 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
fcf0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
fd00: 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
fd10: 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
fd20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
fd30: 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
fd40: 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
fd50: 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
fd60: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29   OPFLAG_PERMUTE)
fd70: 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d  ==0 ) aPermute =
fd80: 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   0;.  n = pOp->p
fd90: 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
fda0: 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
fdb0: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
fdc0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
fdd0: 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
fde0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
fdf0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
fe00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
fe10: 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
fe20: 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
fe30: 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
fe40: 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
fe50: 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
fe60: 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
fe70: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
fe80: 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
fe90: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
fea0: 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
feb0: 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
fec0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
fed0: 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
fee0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
fef0: 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
ff00: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
ff10: 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
ff20: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
ff30: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
ff40: 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
ff50: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ff60: 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
ff70: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
ff80: 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
ff90: 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
ffa0: 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
ffb0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
ffc0: 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
ffd0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
ffe0: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
fff0: 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
10000 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
10010 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
10020 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
10030 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
10040 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
10050 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
10060 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  nfo->nField );. 
10070 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49     pColl = pKeyI
10080 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20  nfo->aColl[i];. 
10090 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e     bRev = pKeyIn
100a0 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69  fo->aSortOrder[i
100b0 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20  ];.    iCompare 
100c0 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
100d0 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  are(&aMem[p1+idx
100e0 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  ], &aMem[p2+idx]
100f0 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66  , pColl);.    if
10100 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20  ( iCompare ){.  
10110 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69      if( bRev ) i
10120 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70  Compare = -iComp
10130 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  are;.      break
10140 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50  ;.    }.  }.  aP
10150 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72  ermute = 0;.  br
10160 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10170 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33  e: Jump P1 P2 P3
10180 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10190 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69  to the instructi
101a0 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31  on at address P1
101b0 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65  , P2, or P3 depe
101c0 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
101d0 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  .** in the most 
101e0 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72  recent OP_Compar
101f0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  e instruction th
10200 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20  e P1 vector was 
10210 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75  less than.** equ
10220 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65  al to, or greate
10230 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65  r than the P2 ve
10240 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65  ctor, respective
10250 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  ly..*/.case OP_J
10260 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ump: {          
10270 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
10280 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29  if( iCompare<0 )
10290 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
102a0 70 31 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p1 - 1;  VdbeBra
102b0 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 0a 20  nchTaken(0,3);. 
102c0 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
102d0 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  are==0 ){.    pc
102e0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20   = pOp->p2 - 1; 
102f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10300 28 31 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  (1,3);.  }else{.
10310 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33      pc = pOp->p3
10320 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
10330 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 7d  hTaken(2,3);.  }
10340 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10350 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
10360 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
10370 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
10380 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] && r[P2]).**.
10390 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
103a0 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
103b0 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
103c0 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
103d0 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
103e0 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
103f0 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
10400 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
10410 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
10420 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
10430 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
10440 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
10450 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
10460 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
10470 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
10480 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
10490 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
104a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
104b0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
104c0 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] || r[P2]).**.
104d0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
104e0 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
104f0 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
10500 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
10510 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
10520 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
10530 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
10540 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
10550 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
10560 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
10570 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
10580 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
10590 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
105a0 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
105b0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
105c0 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
105d0 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
105e0 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
105f0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
10600 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
10610 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
10620 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10630 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
10640 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
10650 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
10660 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
10670 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
10680 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
10690 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
106a0 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
106b0 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
106c0 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
106d0 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
106e0 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
106f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10700 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
10710 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10720 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
10730 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
10740 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10750 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
10760 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
10770 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
10780 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
10790 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
107a0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
107b0 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
107c0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
107d0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
107e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
107f0 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
10800 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
10810 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
10820 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
10830 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
10840 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
10850 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
10860 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
10870 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
10880 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
10890 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
108a0 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
108b0 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
108c0 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
108d0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
108e0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
108f0 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
10900 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10910 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
10920 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
10930 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
10940 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10950 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
10960 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10970 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
10980 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
10990 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
109a0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
109b0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
109c0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
109d0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
109e0 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
109f0 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
10a00 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
10a10 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
10a20 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10a30 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
10a40 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
10a50 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
10a60 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
10a70 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
10a80 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
10a90 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
10aa0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10ab0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
10ac0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
10ad0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
10ae0 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
10af0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
10b00 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
10b10 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
10b20 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
10b30 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74  ut->u.i = !sqlit
10b40 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
10b50 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
10b60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10b70 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
10b80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10b90 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a   r[P1]= ~r[P1].*
10ba0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
10bb0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
10bc0 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
10bd0 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
10be0 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
10bf0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
10c00 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
10c10 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
10c20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
10c30 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
10c40 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
10c50 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
10c60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10c70 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
10c80 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
10c90 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
10ca0 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
10cb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10cc0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
10cd0 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
10ce0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
10cf0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
10d00 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
10d10 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
10d20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73    pOut->u.i = ~s
10d30 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
10d40 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  ue(pIn1);.  }.  
10d50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10d60 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20  ode: Once P1 P2 
10d70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  * * *.**.** Chec
10d80 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61  k the "once" fla
10d90 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20  g number P1. If 
10da0 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20  it is set, jump 
10db0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
10dc0 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  2. .** Otherwise
10dd0 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61  , set the flag a
10de0 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
10df0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
10e00 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f  ruction..** In o
10e10 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73  ther words, this
10e20 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61   opcode causes a
10e30 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63  ll following opc
10e40 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20  odes up through 
10e50 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69  P2.** (but not i
10e60 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20  ncluding P2) to 
10e70 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e  run just once an
10e80 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20  d to be skipped 
10e90 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  on subsequent.**
10ea0 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74   times through t
10eb0 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41  he loop..**.** A
10ec0 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20  ll "once" flags 
10ed0 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c  are initially cl
10ee0 65 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61  eared whenever a
10ef0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
10f00 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67  ent.** first beg
10f10 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63  ins to run..*/.c
10f20 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
10f30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
10f40 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
10f50 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65  pOp->p1<p->nOnce
10f60 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72  Flag );.  VdbeBr
10f70 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e  anchTaken(p->aOn
10f80 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21  ceFlag[pOp->p1]!
10f90 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d  =0, 2);.  if( p-
10fa0 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
10fb0 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  p1] ){.    pc = 
10fc0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c  pOp->p2-1;.  }el
10fd0 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65  se{.    p->aOnce
10fe0 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  Flag[pOp->p1] = 
10ff0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
11000 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
11010 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11020 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
11030 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11040 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
11050 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
11060 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
11070 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
11080 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
11090 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
110a0 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
110b0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
110c0 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
110d0 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
110e0 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ero..*/./* Opcod
110f0 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
11100 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
11110 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
11120 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11130 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
11140 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
11150 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69  nsidered false i
11160 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72  f it has a numer
11170 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f  ic value of zero
11180 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
11190 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
111a0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
111b0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
111c0 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
111d0 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  o..*/.case OP_If
111e0 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
111f0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
11200 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
11210 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
11220 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
11230 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20  int c;.  pIn1 = 
11240 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11250 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
11260 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
11270 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
11280 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
11290 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
112a0 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
112b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
112c0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
112d0 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
112e0 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
112f0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
11300 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
11310 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11320 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
11330 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
11340 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a  Taken(c!=0, 2);.
11350 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70    if( c ){.    p
11360 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
11370 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11380 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
11390 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
113a0 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b  Synopsis:  if r[
113b0 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
113c0 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
113d0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
113e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
113f0 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
11400 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
11410 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
11420 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
11430 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
11440 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
11450 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
11460 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
11470 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
11480 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
11490 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
114a0 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
114b0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
114c0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
114d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
114e0 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  tNull P1 P2 * * 
114f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
11500 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f  f r[P1]!=NULL go
11510 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
11520 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
11530 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11540 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
11550 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
11560 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
11570 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11580 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
11590 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
115a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
115b0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
115c0 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
115d0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20  & MEM_Null)==0, 
115e0 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
115f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11600 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)==0 ){.    pc 
11610 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
11620 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11630 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
11640 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
11650 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
11660 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74  P3]=PX.**.** Int
11670 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
11680 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
11690 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
116a0 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
116b0 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
116c0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
116d0 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
116e0 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
116f0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
11700 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11710 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
11720 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
11730 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
11740 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
11750 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
11760 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
11770 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
11780 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
11790 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
117a0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
117b0 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
117c0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
117d0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
117e0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
117f0 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
11800 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
11810 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
11820 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
11830 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
11840 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
11850 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
11860 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
11870 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
11880 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
11890 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
118a0 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
118b0 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
118c0 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
118d0 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
118e0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
118f0 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
11900 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
11910 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
11920 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
11930 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
11940 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
11950 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
11960 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
11970 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
11980 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
11990 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
119a0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
119b0 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
119c0 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73  OFARG bits are s
119d0 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a  et on P5 when.**
119e0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67   the result is g
119f0 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c  uaranteed to onl
11a00 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  y be used as the
11a10 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c   argument of a l
11a20 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79  ength().** or ty
11a30 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
11a40 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
11a50 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c  The loading of l
11a60 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62  arge blobs can b
11a70 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72  e.** skipped for
11a80 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c   length() and al
11a90 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e  l content loadin
11aa0 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64  g can be skipped
11ab0 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a   for typeof()..*
11ac0 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
11ad0 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61  : {.  i64 payloa
11ae0 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62  dSize64; /* Numb
11af0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
11b00 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
11b10 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
11b20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62    /* column numb
11b30 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a  er to retrieve *
11b40 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
11b50 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
11b60 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42  BE cursor */.  B
11b70 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20  tCursor *pCrsr; 
11b80 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63    /* The BTree c
11b90 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a  ursor */.  u32 *
11ba0 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a  aOffset;      /*
11bb0 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f   aOffset[i] is o
11bc0 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f  ffset to start o
11bd0 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20  f data for i-th 
11be0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
11bf0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
11c00 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
11c10 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
11c20 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
11c30 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
11c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
11c50 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
11c60 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20  Mem *pDest;     
11c70 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77     /* Where to w
11c80 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74  rite the extract
11c90 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65  ed value */.  Me
11ca0 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
11cb0 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
11cc0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
11cd0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
11ce0 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20  nst u8 *zData;  
11cf0 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
11d00 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
11d10 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
11d20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20  u8 *zHdr;    /* 
11d30 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79  Next unparsed by
11d40 74 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  te of the header
11d50 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
11d60 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e  zEndHdr; /* Poin
11d70 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74  ter to first byt
11d80 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64  e after the head
11d90 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73  er */.  u32 offs
11da0 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66  et;        /* Of
11db0 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61  fset into the da
11dc0 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69  ta */.  u32 szFi
11dd0 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  eld;       /* Nu
11de0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
11df0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
11e00 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32  a field */.  u32
11e10 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20   avail;         
11e20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
11e30 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  es of available 
11e40 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b  data */.  u32 t;
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11e60 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d  A type code from
11e70 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
11e80 65 72 20 2a 2f 0a 20 20 75 31 36 20 66 78 3b 20  er */.  u16 fx; 
11e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 44             /* pD
11ea0 65 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65  est->flags value
11eb0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b   */.  Mem *pReg;
11ec0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75           /* Pseu
11ed0 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65  doTable input re
11ee0 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20  gister */..  p2 
11ef0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
11f00 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
11f10 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
11f20 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
11f30 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
11f40 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
11f50 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
11f60 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73  p, pDest);.  ass
11f70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
11f80 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
11f90 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
11fa0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
11fb0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
11fc0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
11fd0 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
11fe0 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
11ff0 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66 6e 64 65  >aOffset;.#ifnde
12000 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
12010 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
12020 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
12030 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50  rsor==0 ); /* OP
12040 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61  _Column never ca
12050 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61 6c 20  lled on virtual 
12060 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
12070 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
12080 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
12090 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d   pCrsr!=0 || pC-
120a0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e  >pseudoTableReg>
120b0 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55  0 ); /* pCrsr NU
120c0 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c  LL on PseudoTabl
120d0 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  es */.  assert( 
120e0 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e  pCrsr!=0 || pC->
120f0 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20 20 20  nullRow );      
12100 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52      /* pC->nullR
12110 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c  ow on PseudoTabl
12120 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74  es */..  /* If t
12130 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20  he cursor cache 
12140 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67 20  is stale, bring 
12150 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f  it up-to-date */
12160 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
12170 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
12180 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
12190 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
121a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
121b0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
121c0 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20  p->cacheCtr ){. 
121d0 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
121e0 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ow ){.      if( 
121f0 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20  pCrsr==0 ){.    
12200 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
12210 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
12220 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67   );.        pReg
12230 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65   = &aMem[pC->pse
12240 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20  udoTableReg];.  
12250 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52        assert( pR
12260 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  eg->flags & MEM_
12270 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20  Blob );.        
12280 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
12290 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
122a0 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
122b0 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20  ize = pC->szRow 
122c0 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e  = avail = pReg->
122d0 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  n;.        pC->a
122e0 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d  Row = (u8*)pReg-
122f0 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  >z;.      }else{
12300 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54  .        MemSetT
12310 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
12320 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
12330 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12340 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
12350 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
12360 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
12370 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
12380 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
12390 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
123a0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
123b0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
123c0 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
123d0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
123e0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
123f0 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
12400 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
12410 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
12420 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61   ); /* True beca
12430 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
12440 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
12450 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73   */.        /* s
12460 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
12470 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
12480 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
12490 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
124a0 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
124b0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
124c0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
124d0 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
124e0 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  .        ** larg
124f0 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e  er than 32 bits.
12500 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
12510 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
12520 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
12530 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
12540 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
12550 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
12560 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
12570 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
12580 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  l);.        pC->
12590 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75  payloadSize = (u
125a0 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  32)payloadSize64
125b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
125c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
125d0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
125e0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
125f0 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
12600 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
12610 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
12620 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f  Crsr, &pC->paylo
12630 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20  adSize);.       
12640 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
12650 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44  ITE_OK );   /* D
12660 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
12670 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20   fail */.       
12680 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
12690 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
126a0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
126b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
126c0 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
126d0 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
126e0 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
126f0 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
12700 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
12710 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
12720 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
12730 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
12740 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
12750 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
12760 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
12770 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
12780 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
12790 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
127a0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
127b0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
127c0 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
127d0 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ig;.      }.    
127e0 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  }.    pC->cacheS
127f0 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
12800 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64  Ctr;.    pC->iHd
12810 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72  rOffset = getVar
12820 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20  int32(pC->aRow, 
12830 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d  offset);.    pC-
12840 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b  >nHdrParsed = 0;
12850 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20  .    aOffset[0] 
12860 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f  = offset;..    /
12870 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
12880 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
12890 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
128a0 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
128b0 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68  er..    ** Do th
128c0 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
128d0 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
128e0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
128f0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70     **.    ** Typ
12900 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
12910 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
12920 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
12930 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
12940 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
12950 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
12960 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
12970 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
12980 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20  nd 32 of.    ** 
12990 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
129a0 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
129b0 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
129c0 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
129d0 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74  .    ** 3-byte t
129e0 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
129f0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
12a00 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
12a10 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65  s three.    ** e
12a20 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
12a30 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
12a40 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
12a50 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
12a60 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66     */.    if( of
12a70 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20  fset > 98307 || 
12a80 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79  offset > pC->pay
12a90 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
12aa0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
12ab0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
12ac0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12ad0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
12ae0 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
12af0 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  set ){.      /* 
12b00 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
12b10 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
12b20 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
12b30 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
12b40 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
12b50 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
12b60 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
12b70 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
12b80 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
12b90 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
12ba0 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
12bb0 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
12bc0 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
12bd0 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
12be0 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
12bf0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
12c00 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
12c10 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
12c20 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d  szRow = 0;.    }
12c30 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
12c40 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61  lowing goto is a
12c50 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20  n optimization. 
12c60 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74   It can be omitt
12c70 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65 76  ed and.    ** ev
12c80 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74  erything will st
12c90 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f  ill work.  But O
12ca0 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73  P_Column is meas
12cb0 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20  urably faster.  
12cc0 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67    ** by skipping
12cd0 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   the subsequent 
12ce0 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69  conditional, whi
12cf0 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 72 75  ch is always tru
12d00 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
12d10 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61  sert( pC->nHdrPa
12d20 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20  rsed<=p2 );     
12d30 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e      /* Condition
12d40 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20  al skipped */.  
12d50 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12d60 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20  _read_header;.  
12d70 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
12d80 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66  e at least the f
12d90 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65  irst p2+1 entrie
12da0 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
12db0 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70  have been.  ** p
12dc0 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20  arsed and valid 
12dd0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69  information is i
12de0 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20  n aOffset[] and 
12df0 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a  pC->aType[]..  *
12e00 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72  /.  if( pC->nHdr
12e10 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
12e20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
12e30 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61   more header ava
12e40 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69  ilable for parsi
12e50 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ng in the record
12e60 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20  , try.    ** to 
12e70 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e  extract addition
12e80 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72  al fields up thr
12e90 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68  ough the p2+1-th
12ea0 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20   field .    */. 
12eb0 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61     op_column_rea
12ec0 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 69 66  d_header:.    if
12ed0 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
12ee0 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
12ef0 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
12f00 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
12f10 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
12f20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
12f30 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
12f40 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
12f50 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
12f60 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
12f70 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
12f80 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
12f90 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12fa0 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61  tree(pCrsr, 0, a
12fb0 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20  Offset[0], .    
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
12ff0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
13000 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13010 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
13020 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
13030 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
13040 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
13050 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
13060 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13070 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
13080 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13090 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43     /* Fill in pC
130a0 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  ->aType[i] and a
130b0 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
130c0 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
130d0 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
130e0 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
130f0 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
13100 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  set = aOffset[i]
13110 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
13120 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
13130 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
13140 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
13150 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
13160 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26   assert( i<=p2 &
13170 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
13180 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
13190 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c      if( zHdr[0]<
131a0 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
131b0 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20    t = zHdr[0];. 
131c0 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
131d0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
131e0 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b            zHdr +
131f0 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
13200 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a  nt32(zHdr, &t);.
13210 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
13220 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d    pC->aType[i] =
13230 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69   t;.        szFi
13240 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62  eld = sqlite3Vdb
13250 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
13260 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65  );.        offse
13270 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20  t += szField;.  
13280 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74        if( offset
13290 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20  <szField ){  /* 
132a0 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f  True if offset o
132b0 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20  verflows */.    
132c0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45        zHdr = &zE
132d0 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f  ndHdr[1];  /* Fo
132e0 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52  rces SQLITE_CORR
132f0 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77  UPT return below
13300 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72   */.          br
13310 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
13320 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
13330 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
13340 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d   offset;.      }
13350 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
13360 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
13370 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61        pC->nHdrPa
13380 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20  rsed = i;.      
13390 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
133a0 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44   (u32)(zHdr - zD
133b0 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ata);.      if( 
133c0 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
133d0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
133e0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
133f0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65  em);.        sMe
13400 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
13410 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ll;.      }.  . 
13420 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f       /* The reco
13430 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66  rd is corrupt if
13440 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
13450 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a  owing are true:.
13460 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65        ** (1) the
13470 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65   bytes of the he
13480 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74  ader extend past
13490 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65   the declared he
134a0 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20  ader size.      
134b0 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a 48 64  **          (zHd
134c0 72 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20 20 20  r>zEndHdr).     
134d0 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69   ** (2) the enti
134e0 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73  re header was us
134f0 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64  ed but not all d
13500 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20  ata was used.   
13510 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28     **          (
13520 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr==zEndHdr &&
13530 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79   offset!=pC->pay
13540 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
13550 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f  ** (3) the end o
13560 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e  f the data exten
13570 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e  ds beyond the en
13580 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  d of the record.
13590 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
135a0 20 20 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d     (offset > pC-
135b0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
135c0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
135d0 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20   (zHdr>=zEndHdr 
135e0 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72  && (zHdr>zEndHdr
135f0 20 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e   || offset!=pC->
13600 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
13610 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20       || (offset 
13620 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
13630 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  e).      ){.    
13640 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
13650 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
13660 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
13670 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20  lumn_error;.    
13680 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
13690 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e  * If after tryin
136a0 67 20 74 6f 20 65 78 74 72 61 20 6e 65 77 20 65  g to extra new e
136b0 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
136c0 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72 73  header, nHdrPars
136d0 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69  ed is.    ** sti
136e0 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c  ll not up to p2,
136f0 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
13700 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
13710 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20 20  fewer than p2.  
13720 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53    ** columns.  S
13730 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c  o the result wil
13740 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65 20  l be either the 
13750 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72  default value or
13760 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a   a NULL..    */.
13770 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72      if( pC->nHdr
13780 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
13790 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
137a0 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20  ype==P4_MEM ){. 
137b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
137c0 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
137d0 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e  (pDest, pOp->p4.
137e0 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pMem, MEM_Static
137f0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
13800 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
13810 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
13820 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  est);.      }.  
13830 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13840 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
13850 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20  }..  /* Extract 
13860 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  the content for 
13870 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75  the p2+1-th colu
13880 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e  mn.  Control can
13890 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68   only.  ** reach
138a0 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61   this point if a
138b0 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66  Offset[p2], aOff
138c0 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70  set[p2+1], and p
138d0 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72 65  C->aType[p2] are
138e0 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e  .  ** all valid.
138f0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
13900 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  p2<pC->nHdrParse
13910 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  d );.  assert( r
13920 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
13930 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
13940 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
13950 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20 29  ariants(pDest) )
13960 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44  ;.  if( VdbeMemD
13970 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29 20  ynamic(pDest) ) 
13980 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13990 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
139a0 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
139b0 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52  ];.  if( pC->szR
139c0 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31  ow>=aOffset[p2+1
139d0 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ] ){.    /* This
139e0 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63   is the common c
139f0 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65  ase where the de
13a00 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69  sired content fi
13a10 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e  ts on the origin
13a20 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d  al.    ** page -
13a30 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65   where the conte
13a40 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20  nt is not on an 
13a50 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f  overflow page */
13a60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
13a70 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52  SerialGet(pC->aR
13a80 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  ow+aOffset[p2], 
13a90 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c  t, pDest);.  }el
13aa0 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  se{.    /* This 
13ab0 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f  branch happens o
13ac0 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74  nly when content
13ad0 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20   is on overflow 
13ae0 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28  pages */.    if(
13af0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50   ((pOp->p5 & (OP
13b00 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f  FLAG_LENGTHARG|O
13b10 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
13b20 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26  )!=0.          &
13b30 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26  & ((t>=12 && (t&
13b40 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e  1)==0) || (pOp->
13b50 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45  p5 & OPFLAG_TYPE
13b60 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20  OFARG)!=0)).    
13b70 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74   || (len = sqlit
13b80 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13b90 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29  Len(t))==0.    )
13ba0 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65  {.      /* Conte
13bb0 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74  nt is irrelevant
13bc0 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20   for.      **   
13bd0 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29   1. the typeof()
13be0 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20   function,.     
13bf0 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65   **    2. the le
13c00 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
13c10 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c   if X is a blob,
13c20 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20   and.      **   
13c30 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65   3. if the conte
13c40 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72  nt length is zer
13c50 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77  o..      ** So w
13c60 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
13c70 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e  use bogus conten
13c80 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65  t rather than re
13c90 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63  ading.      ** c
13ca0 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b  ontent from disk
13cb0 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77 6f 72  .  NULL will wor
13cc0 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20  k for the value 
13cd0 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20 20 20  for strings.    
13ce0 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73 20 61    ** and blobs a
13cf0 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20 69  nd whatever is i
13d00 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a  n the payloadSiz
13d10 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20  e64 variable.   
13d20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20     ** will work 
13d30 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20 65  for everything e
13d40 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71  lse. */.      sq
13d50 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
13d60 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29  et(t<=13 ? (u8*)
13d70 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a  &payloadSize64 :
13d80 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20   0, t, pDest);. 
13d90 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13da0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
13db0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
13dc0 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  sr, aOffset[p2],
13dd0 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62   len, !pC->isTab
13de0 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  le,.            
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 20 70 44 65 73 74 29 3b 0a 20         pDest);. 
13e10 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13e20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13e30 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13e40 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
13e50 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13e60 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73  eSerialGet((cons
13e70 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20  t u8*)pDest->z, 
13e80 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  t, pDest);.     
13e90 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
13ea0 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20   ~MEM_Ephem;.   
13eb0 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e   }.  }.  pDest->
13ec0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
13ed0 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a  .op_column_out:.
13ee0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
13ef0 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e 20 65  mn value is an e
13f00 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 2c  phemeral string,
13f10 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20 70 65   go ahead and pe
13f20 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61 74 20  rsist.  ** that 
13f30 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65 20 74  string in case t
13f40 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20  he cursor moves 
13f50 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c 75 6d  before the colum
13f60 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a 2a 20  n value is.  ** 
13f70 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  used.  The follo
13f80 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73 20 74  wing code does t
13f90 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  he equivalent of
13fa0 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
13fb0 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65 73 20  ).  ** but does 
13fc0 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a 20 20  it faster. */.  
13fd0 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c 61 67  if( (pDest->flag
13fe0 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 21 3d  s & MEM_Ephem)!=
13ff0 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20 29 7b  0 && pDest->z ){
14000 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73 74 2d  .    fx = pDest-
14010 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
14020 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 20  r|MEM_Blob);.   
14030 20 61 73 73 65 72 74 28 20 66 78 21 3d 30 20 29   assert( fx!=0 )
14040 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63  ;.    zData = (c
14050 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e  onst u8*)pDest->
14060 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70 44 65  z;.    len = pDe
14070 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 73  st->n;.    if( s
14080 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
14090 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44 65 73  arAndResize(pDes
140a0 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f 74 6f  t, len+2) ) goto
140b0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d 65 6d   no_mem;.    mem
140c0 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
140d0 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 70  ata, len);.    p
140e0 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30  Dest->z[len] = 0
140f0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c  ;.    pDest->z[l
14100 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 70  en+1] = 0;.    p
14110 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 66 78  Dest->flags = fx
14120 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 6f  |MEM_Term;.  }.o
14130 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a  p_column_error:.
14140 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
14150 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20  BSIZE(pDest);.  
14160 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
14170 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
14180 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14190 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
141a0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
141b0 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
141c0 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ty(r[P1@P2]).**.
141d0 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
141e0 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
141f0 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
14200 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
14210 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
14220 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
14230 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
14240 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63  . The nth charac
14250 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
14260 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
14270 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
14280 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
14290 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
142a0 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
142b0 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
142c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
142d0 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
142e0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
142f0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
14300 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
14310 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20  */.  char cAff; 
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14330 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63   A single charac
14340 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20  ter of affinity 
14350 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
14360 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
14370 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
14380 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
14390 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e   zAffinity[pOp->
143a0 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  p2]==0 );.  pIn1
143b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
143c0 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66  ];.  while( (cAf
143d0 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  f = *(zAffinity+
143e0 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  +))!=0 ){.    as
143f0 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70  sert( pIn1 <= &p
14400 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  ->aMem[(p->nMem-
14410 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
14420 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
14430 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
14440 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
14450 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e  y(pIn1, cAff, en
14460 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e  coding);.    pIn
14470 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
14480 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14490 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
144a0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
144b0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65  psis: r[P3]=mkre
144c0 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  c(r[P1@P2]).**.*
144d0 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
144e0 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
144f0 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
14500 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
14510 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
14520 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
14530 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
14540 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
14550 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
14560 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
14570 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
14580 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
14590 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
145a0 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
145b0 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
145c0 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
145d0 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
145e0 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
145f0 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14600 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
14610 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
14620 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
14630 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
14640 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
14650 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
14660 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
14670 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
14680 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
14690 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
146a0 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
146b0 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
146c0 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
146d0 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
146e0 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63  inity NONE..*/.c
146f0 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
14700 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52  d: {.  u8 *zNewR
14710 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a  ecord;        /*
14720 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c   A buffer to hol
14730 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  d the data for t
14740 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
14750 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
14760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14770 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
14780 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
14790 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
147a0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
147b0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
147c0 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
147d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
147e0 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
147f0 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
14800 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
14810 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
14820 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
14830 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
14840 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
14850 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14860 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
14870 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
14880 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14890 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
148a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
148b0 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
148c0 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
148d0 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
148e0 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
148f0 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
14900 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
14910 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
14920 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
14930 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
14940 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
14950 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
14960 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
14970 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
14980 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14990 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
149a0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
149b0 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
149c0 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
149d0 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
149e0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
149f0 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
14a00 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
14a10 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
14a20 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
14a30 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
14a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
14a50 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
14a60 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a  ecord[] header *
14a70 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
14a80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
14a90 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
14aa0 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74  Record[] content
14ab0 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14ad0 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
14ae0 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
14af0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
14b00 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
14b10 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
14b20 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
14b30 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
14b40 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
14b50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
14b90 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
14ba0 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
14bb0 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
14bc0 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
14bd0 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
14be0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
14bf0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
14c30 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
14c40 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
14c50 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
14c60 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
14c70 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
14c80 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a  d so forth..  **
14c90 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
14ca0 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
14cb0 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
14cc0 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
14cd0 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
14ce0 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
14cf0 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
14d00 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14d10 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
14d20 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
14d30 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
14d40 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
14d50 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
14d60 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
14d70 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
14d80 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
14d90 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
14da0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14db0 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
14dc0 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
14dd0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14de0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
14df0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a  er space */.  nZ
14e00 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
14e10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
14e20 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
14e30 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
14e40 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
14e50 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
14e60 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
14e70 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
14e80 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
14e90 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
14ea0 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  eld<=(p->nMem-p-
14eb0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
14ec0 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b   pData0 = &aMem[
14ed0 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c  nField];.  nFiel
14ee0 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  d = pOp->p2;.  p
14ef0 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e  Last = &pData0[n
14f00 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65  Field-1];.  file
14f10 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e  _format = p->min
14f20 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b  WriteFileFormat;
14f30 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20  ..  /* Identify 
14f40 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
14f50 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ter */.  assert(
14f60 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
14f70 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
14f80 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
14f90 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
14fa0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
14fb0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
14fc0 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c  Out);..  /* Appl
14fd0 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  y the requested 
14fe0 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20  affinity to all 
14ff0 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73  inputs.  */.  as
15000 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
15010 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66  ast );.  if( zAf
15020 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52  finity ){.    pR
15030 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20  ec = pData0;.   
15040 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79   do{.      apply
15050 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c  Affinity(pRec++,
15060 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
15070 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
15080 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
15090 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65  ity[0]==0 || pRe
150a0 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20  c<=pLast );.    
150b0 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
150c0 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f  y[0] );.  }..  /
150d0 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74  * Loop through t
150e0 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74  he elements that
150f0 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68   will make up th
15100 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75  e record to figu
15110 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20  re.  ** out how 
15120 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65  much space is re
15130 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e  quired for the n
15140 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a  ew record..  */.
15150 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a    pRec = pLast;.
15160 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
15170 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
15180 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e  c) );.    pRec->
15190 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74  uTemp = serial_t
151a0 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
151b0 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
151c0 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
151d0 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
151e0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
151f0 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
15200 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
15210 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
15220 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61  ){.      if( nDa
15230 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ta ){.        sq
15240 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
15250 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
15260 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15270 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63     nZero += pRec
15280 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
15290 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e     len -= pRec->
152a0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d  u.nZero;.      }
152b0 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61  .    }.    nData
152c0 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73   += len;.    tes
152d0 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
152e0 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74  pe==127 );.    t
152f0 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
15300 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20  type==128 );.   
15310 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f   nHdr += serial_
15320 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20  type<=127 ? 1 : 
15330 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
15340 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
15350 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63   }while( (--pRec
15360 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20  )>=pData0 );..  
15370 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
15380 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
15390 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
153a0 69 7a 65 20 2a 2f 0a 20 20 74 65 73 74 63 61 73  ize */.  testcas
153b0 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a  e( nHdr==126 );.
153c0 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
153d0 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e  ==127 );.  if( n
153e0 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20  Hdr<=126 ){.    
153f0 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  /* The common ca
15400 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b  se */.    nHdr +
15410 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 1;.  }else{.  
15420 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f    /* Rare case o
15430 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65  f a really large
15440 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e   header */.    n
15450 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
15460 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
15470 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  .    nHdr += nVa
15480 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56  rint;.    if( nV
15490 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
154a0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e  intLen(nHdr) ) n
154b0 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
154c0 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b  te = nHdr+nData;
154d0 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
154e0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
154f0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
15500 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
15510 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
15520 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
15530 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
15540 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
15550 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
15560 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
15570 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
15580 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
15590 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
155a0 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
155b0 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
155c0 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
155d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
155e0 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
155f0 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
15600 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
15610 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
15620 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
15630 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
15640 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
15650 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
15660 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
15670 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
15680 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
15690 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
156a0 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
156b0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
156c0 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
156d0 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
156e0 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
156f0 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
15700 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
15710 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
15720 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
15730 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
15740 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
15750 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
15760 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
15770 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  e);            /
15780 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
15790 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65  .    j += sqlite
157a0 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
157b0 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70  zNewRecord[j], p
157c0 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  Rec, serial_type
157d0 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f  ); /* content */
157e0 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52  .  }while( (++pR
157f0 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ec)<=pLast );.  
15800 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20  assert( i==nHdr 
15810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d  );.  assert( j==
15820 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
15830 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
15840 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
15850 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
15860 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
15870 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
15880 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
15890 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20  ob;.  if( nZero 
158a0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
158b0 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
158c0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
158d0 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
158e0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
158f0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
15900 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
15910 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
15920 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
15930 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15940 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
15950 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15960 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
15970 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15980 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
15990 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
159a0 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a  r[P2]=count().**
159b0 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
159c0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
159d0 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
159e0 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
159f0 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
15a00 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
15a10 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
15a20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
15a30 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
15a40 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
15a50 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
15a60 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
15a70 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
15a80 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
15a90 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  ;..  pCrsr = p->
15aa0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
15ab0 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
15ac0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45  t( pCrsr );.  nE
15ad0 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  ntry = 0;  /* No
15ae0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
15af0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
15b00 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
15b10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15b20 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
15b30 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e  Entry);.  pOut->
15b40 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
15b50 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
15b60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
15b70 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
15b80 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
15b90 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
15ba0 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
15bb0 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
15bc0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
15bd0 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
15be0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
15bf0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
15c00 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
15c10 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
15c20 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
15c30 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
15c40 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
15c50 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
15c60 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
15c70 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
15c80 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
15cb0 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
15cc0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15ce0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
15cf0 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
15d00 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
15d10 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
15d20 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
15d30 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
15d40 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
15d50 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
15d60 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
15d70 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
15d80 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
15d90 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
15da0 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
15db0 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
15dc0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
15dd0 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
15de0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
15df0 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
15e00 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
15e10 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
15e20 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
15e30 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
15e40 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
15e50 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
15e60 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
15e70 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
15e80 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
15e90 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
15ea0 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
15eb0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
15ec0 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
15ed0 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
15ee0 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
15ef0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
15f00 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
15f10 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
15f20 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
15f30 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
15f40 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
15f50 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
15f60 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
15f70 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
15f80 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
15f90 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
15fa0 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
15fb0 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
15fc0 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
15fd0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15fe0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15ff0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
16000 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
16010 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
16020 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
16030 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
16040 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
16050 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
16060 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
16070 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
16080 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
16090 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
160a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
160b0 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
160c0 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
160d0 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
160e0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
160f0 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
16100 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
16110 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
16120 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
16130 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
16140 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
16150 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
16160 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
16170 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
16180 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
16190 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
161a0 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
161b0 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
161c0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
161d0 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
161e0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
161f0 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
16200 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
16210 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
16220 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
16260 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
16270 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16280 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16290 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
162a0 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
162b0 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
162c0 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
162d0 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
162e0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
162f0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
16300 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
16310 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
16320 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
16330 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
16340 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
16350 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
16360 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
16370 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
16380 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
16390 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
163a0 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
163b0 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
163c0 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
163d0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
163e0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
163f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
16400 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
16410 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
16420 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
16430 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
16440 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16450 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
16460 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16470 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
16480 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
16490 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
164a0 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
164b0 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
164c0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
164d0 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
164e0 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
164f0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
16500 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
16510 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
16520 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
16530 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
16540 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
16550 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
16560 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
16570 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
16580 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  mCons;.      }. 
16590 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
165a0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
165b0 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
165c0 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
165d0 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
165e0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
165f0 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
16600 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
16610 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
16620 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
16630 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
16640 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
16650 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
16660 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
16670 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
16680 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
16690 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
166a0 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
166b0 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
166c0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
166d0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
166e0 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
166f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16700 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16710 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
16720 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
16730 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
16740 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16750 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
16760 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
16770 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
16780 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
16790 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
167a0 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
167b0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
167c0 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
167d0 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
167e0 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
167f0 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
16800 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
16810 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16820 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
16830 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61     "cannot relea
16840 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  se savepoint - S
16850 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
16860 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20   progress".     
16870 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   );.      rc = S
16880 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16890 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
168a0 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
168b0 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
168c0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
168d0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
168e0 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
168f0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
16900 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
16910 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
16920 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
16930 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
16940 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
16950 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
16960 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16970 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
16980 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16990 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
169a0 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
169b0 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
169c0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
169d0 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
169e0 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
169f0 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
16a00 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
16a10 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16a20 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16a30 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16a40 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
16a50 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
16a60 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
16a70 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
16a80 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
16a90 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
16aa0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
16ab0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
16ac0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16ad0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16ae0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16af0 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
16b00 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16b10 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
16b20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
16b30 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16b40 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
16b50 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
16b60 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
16b70 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
16b80 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
16b90 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
16ba0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
16bb0 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
16bd0 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43  te3BtreeTripAllC
16be0 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69  ursors(db->aDb[i
16bf0 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f 41  i].pBt, SQLITE_A
16c00 42 4f 52 54 29 3b 0a 20 20 20 20 20 20 20 20 20  BORT);.         
16c10 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
16c20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
16c30 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
16c40 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
16c50 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
16c60 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
16c70 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
16c80 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
16c90 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
16ca0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
16cb0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
16cc0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
16cd0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16ce0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70   }.        if( p
16cf0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
16d00 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c  LBACK && (db->fl
16d10 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
16d20 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a  nChanges)!=0 ){.
16d30 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
16d40 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
16d50 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
16d60 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
16d70 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
16d80 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
16d90 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
16da0 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
16db0 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
16dc0 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
16dd0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
16de0 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
16df0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
16e00 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
16e10 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
16e20 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
16e30 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
16e40 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
16e50 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
16e60 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
16e70 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
16e80 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
16e90 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
16ea0 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
16eb0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
16ec0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
16ed0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
16ee0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
16ef0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
16f00 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
16f10 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
16f20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
16f30 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
16f40 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
16f50 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
16f60 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
16f70 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
16f80 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
16f90 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
16fa0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
16fb0 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
16fc0 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
16fd0 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
16fe0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
16ff0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
17000 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
17010 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
17020 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
17030 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
17040 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
17050 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
17060 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
17070 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
17080 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
17090 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
170a0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
170b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
170c0 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
170d0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
170e0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
170f0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
17100 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
17110 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17120 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
17130 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
17140 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
17150 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
17160 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
17170 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
17180 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
17190 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
171a0 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
171b0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
171c0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
171d0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
171e0 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
171f0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
17200 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17210 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17220 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17230 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
17240 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
17250 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
17260 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
17270 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
17280 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
17290 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
172a0 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
172b0 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
172c0 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
172d0 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
172e0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
172f0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
17300 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
17310 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
17320 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
17330 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
17340 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
17350 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
17360 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
17370 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
17380 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
17390 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
173a0 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
173b0 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
173c0 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
173d0 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
173e0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
173f0 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
17400 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
17410 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
17420 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
17430 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
17440 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
17450 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
17460 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
17470 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
17480 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
17490 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
174a0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
174b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
174c0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
174d0 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
174e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
174f0 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
17500 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
17510 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
17520 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73   active */.  ass
17530 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
17540 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66  r );..#if 0.  if
17550 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
17560 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
17570 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a  VdbeActive>1 ){.
17580 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
17590 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
175a0 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
175b0 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
175c0 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
175d0 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
175e0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
175f0 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
17600 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17610 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
17620 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
17630 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
17640 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
17650 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
17660 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
17670 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
17680 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
17690 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
176a0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
176b0 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
176c0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
176d0 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  lse.#endif.  if(
176e0 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52   turnOnAC && !iR
176f0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
17700 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
17710 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
17720 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
17730 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
17740 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
17750 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72  writing.    ** r
17760 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
17770 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
17780 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
17790 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
177a0 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
177b0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
177c0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
177d0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
177e0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
177f0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17800 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17810 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
17820 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
17830 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
17840 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
17850 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
17860 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
17870 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
17880 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17890 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
178a0 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
178b0 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
178c0 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
178d0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
178e0 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
178f0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
17900 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
17910 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
17920 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
17930 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
17940 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
17950 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
17960 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
17970 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
17980 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
17990 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
179a0 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
179b0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
179c0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
179d0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
179e0 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
179f0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
17a00 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
17a10 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17a20 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
17a30 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
17a40 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
17a50 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
17a60 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
17a70 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
17a80 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
17a90 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17aa0 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
17ab0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
17ac0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
17ad0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
17ae0 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
17af0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17b00 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17b10 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
17b20 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
17b30 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
17b40 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
17b50 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
17b60 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
17b70 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
17b80 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
17b90 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
17ba0 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
17bc0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
17bd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17be0 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
17bf0 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
17c00 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
17c10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17c20 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
17c30 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
17c40 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
17c50 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
17c60 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
17c70 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
17c80 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
17c90 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
17ca0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
17cb0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
17cc0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
17cd0 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
17ce0 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
17cf0 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
17d00 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
17d10 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
17d20 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
17d30 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
17d40 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
17d50 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
17d60 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
17d70 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
17d80 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
17d90 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
17da0 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
17db0 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
17dc0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
17dd0 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
17de0 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
17df0 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
17e00 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
17e10 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
17e20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
17e30 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
17e40 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
17e50 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
17e60 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
17e70 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
17e80 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
17e90 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
17ea0 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
17eb0 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
17ec0 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
17ed0 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
17ee0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
17ef0 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
17f00 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
17f10 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
17f20 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
17f30 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
17f40 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
17f50 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
17f60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
17f70 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
17f80 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
17f90 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
17fa0 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
17fb0 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
17fc0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
17fd0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17fe0 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
17ff0 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
18000 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
18010 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
18020 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
18030 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
18040 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
18050 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
18060 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
18070 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
18080 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
18090 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
180a0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
180b0 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
180c0 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
180d0 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
180e0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
180f0 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
18100 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
18110 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
18120 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
18130 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
18140 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
18150 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
18160 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
18170 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
18180 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
18190 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
181a0 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
181b0 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
181c0 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
181d0 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
181e0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
181f0 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
18200 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
18210 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
18220 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
18230 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
18240 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
18250 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
18260 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
18270 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
18280 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
18290 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
182a0 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
182b0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
182c0 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
182d0 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
182e0 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
182f0 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
18300 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
18310 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
18320 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
18330 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
18340 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
18350 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
18360 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
18370 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
18380 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
18390 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
183a0 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
183b0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
183c0 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
183d0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
183e0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
183f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18400 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
18410 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18420 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
18430 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
18440 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
18450 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
18460 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
18470 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
18480 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18490 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
184a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
184b0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
184c0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
184d0 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
184e0 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
184f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
18500 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
18510 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
18520 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
18530 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
18540 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
18550 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
18560 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
18570 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18580 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
18590 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
185a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
185b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
185c0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
185d0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
185e0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
185f0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
18600 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
18610 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
18620 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
18630 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
18640 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
18650 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
18660 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
18670 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
18680 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
18690 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
186a0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
186b0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
186c0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
186d0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
186e0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
186f0 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
18700 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18710 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
18720 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
18730 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
18740 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
18750 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
18760 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
18770 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
18780 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
18790 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
187a0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
187b0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
187c0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
187d0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
187e0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
187f0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
18800 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
18810 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
18820 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
18830 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
18840 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
18850 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
18860 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
18870 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
18880 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
18890 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
188a0 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
188b0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
188c0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
188d0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
188e0 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
188f0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
18900 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
18910 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42   */.    sqlite3B
18920 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c  treeGetMeta(pBt,
18930 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45   BTREE_SCHEMA_VE
18940 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69  RSION, (u32 *)&i
18950 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20  Meta);.    iGen 
18960 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
18970 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e  1].pSchema->iGen
18980 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65  eration;.  }else
18990 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65  {.    iGen = iMe
189a0 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73  ta = 0;.  }.  as
189b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
189c0 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
189d0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69  =P4_INT32 );.  i
189e0 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69  f( pOp->p5 && (i
189f0 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c  Meta!=pOp->p3 ||
18a00 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69   iGen!=pOp->p4.i
18a10 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
18a20 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
18a30 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
18a40 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
18a50 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
18a60 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
18a70 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
18a80 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
18a90 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
18aa0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
18ab0 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
18ac0 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
18ad0 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
18ae0 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
18af0 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
18b00 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
18b10 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
18b20 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
18b30 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
18b40 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
18b50 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
18b60 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
18b70 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
18b80 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
18b90 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
18ba0 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
18bb0 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
18bc0 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
18bd0 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
18be0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
18bf0 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
18c00 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
18c10 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
18c20 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
18c30 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
18c40 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
18c50 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
18c60 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
18c70 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
18c80 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
18c90 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
18ca0 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
18cb0 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
18cc0 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
18cd0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
18ce0 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
18cf0 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
18d00 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
18d10 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
18d20 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
18d30 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
18d40 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
18d50 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
18d60 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
18d70 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
18d80 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
18d90 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
18da0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
18db0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
18dc0 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69     }.    p->expi
18dd0 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  red = 1;.    rc 
18de0 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
18df0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
18e00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64  ./* Opcode: Read
18e10 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
18e20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63  * *.**.** Read c
18e30 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20  ookie number P3 
18e40 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31  from database P1
18e50 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
18e60 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
18e70 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20  ** P3==1 is the 
18e80 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
18e90 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P3==2 is the da
18ea0 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
18eb0 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72  * P3==3 is the r
18ec0 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
18ed0 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64   cache size, and
18ee0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
18ef0 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e  0 is.** the main
18f00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
18f10 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
18f20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
18f30 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  ed to store.** t
18f40 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
18f50 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73  .**.** There mus
18f60 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b  t be a read-lock
18f70 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
18f80 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73   (either a trans
18f90 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62  action.** must b
18fa0 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65  e started or the
18fb0 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70  re must be an op
18fc0 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72  en cursor) befor
18fd0 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74  e.** executing t
18fe0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
18ff0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64  .*/.case OP_Read
19000 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
19010 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
19020 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
19030 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
19040 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
19050 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
19060 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
19070 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
19080 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
19090 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
190a0 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
190b0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
190c0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
190d0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
190e0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
190f0 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
19100 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
19110 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
19120 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20  Mask, iDb) );.. 
19130 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
19140 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
19150 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
19160 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
19170 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
19180 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eta;.  break;.}.
19190 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43  ./* Opcode: SetC
191a0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
191b0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
191c0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
191d0 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65 72  gister P3 (inter
191e0 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74  preted as an int
191f0 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f  eger).** into co
19200 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
19210 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  f database P1.  
19220 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
19230 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a  ema version.  .*
19240 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64  * P2==2 is the d
19250 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20  atabase format. 
19260 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
19270 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
19280 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
19290 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
192a0 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
192b0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
192c0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
192d0 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
192e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
192f0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
19300 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
19310 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
19320 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
19330 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
19340 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
19350 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  tCookie: {      
19360 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20   /* in3 */.  Db 
19370 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
19380 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
19390 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
193a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
193b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
193c0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
193d0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
193e0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
193f0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
19400 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
19410 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
19420 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
19430 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
19440 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
19450 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
19460 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
19470 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70  p->p1, 0) );.  p
19480 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
19490 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p3];.  sqlite3V
194a0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
194b0 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
194c0 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
194d0 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
194e0 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
194f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19500 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
19510 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
19520 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b  (int)pIn3->u.i);
19530 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
19540 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
19550 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
19560 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
19570 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
19580 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
19590 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
195a0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
195b0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
195c0 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
195d0 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
195e0 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
195f0 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
19600 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
19610 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
19620 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
19630 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
19640 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
19650 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
19660 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
19670 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
19680 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
19690 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
196a0 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
196b0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
196c0 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
196d0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
196e0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
196f0 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
19700 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
19710 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
19720 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
19730 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
19740 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
19750 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19760 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
19770 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
19780 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
19790 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
197a0 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
197b0 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
197c0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
197d0 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
197e0 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
197f0 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
19800 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
19810 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
19820 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
19830 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19840 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
19850 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
19860 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
19870 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
19880 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
19890 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
198a0 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
198b0 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
198c0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
198d0 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
198e0 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
198f0 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
19900 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
19910 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
19920 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
19930 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
19940 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
19950 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
19960 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
19970 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
19980 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
19990 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
199a0 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
199b0 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
199c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
199d0 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
199e0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
199f0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
19a00 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
19a10 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
19a20 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
19a30 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
19a40 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
19a50 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
19a60 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
19a70 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
19a80 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
19a90 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
19aa0 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
19ab0 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
19ac0 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
19ad0 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
19ae0 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
19af0 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
19b00 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
19b10 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
19b20 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
19b30 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
19b40 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
19b50 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
19b60 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
19b70 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
19b80 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
19b90 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
19ba0 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
19bb0 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
19bc0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
19bd0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
19be0 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
19bf0 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
19c00 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
19c10 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
19c20 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
19c30 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
19c40 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
19c50 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
19c60 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
19c70 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
19c80 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
19c90 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
19ca0 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
19cb0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
19cc0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
19cd0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
19ce0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
19cf0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
19d00 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
19d10 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
19d20 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
19d30 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
19d40 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
19d50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
19d60 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
19d70 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
19d80 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
19d90 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  e works exactly 
19da0 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78  like ReadOpen ex
19db0 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72  cept that it fir
19dc0 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  st.** checks to 
19dd0 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f  see if the curso
19de0 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61  r on P1 is alrea
19df0 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72  dy open with a r
19e00 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  oot page.** numb
19e10 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20  er of P2 and if 
19e20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
19e30 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
19e40 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
19e50 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
19e60 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
19e70 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
19e80 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
19e90 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
19ea0 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
19eb0 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61  sed with P5==0 a
19ec0 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
19ed0 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f  .** a P4_KEYINFO
19ee0 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65   object.  Furthe
19ef0 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61  rmore, the P3 va
19f00 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65 20  lue must be the 
19f10 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79  same as.** every
19f20 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78   other ReopenIdx
19f30 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72   or OpenRead for
19f40 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72   the same cursor
19f50 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53   number..**.** S
19f60 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20  ee the OpenRead 
19f70 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61  opcode documenta
19f80 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
19f90 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
19fa0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
19fb0 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
19fc0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
19fd0 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
19fe0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
19ff0 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1a000 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
1a010 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1a020 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
1a030 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
1a040 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
1a050 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1a060 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
1a070 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
1a080 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1a090 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1a0a0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1a0b0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1a0c0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1a0d0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1a0e0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1a0f0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1a100 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1a110 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1a120 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1a130 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1a140 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1a150 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1a160 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1a170 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1a180 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1a190 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1a1a0 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1a1b0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1a1c0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1a1d0 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
1a1e0 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
1a1f0 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
1a200 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1a210 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
1a220 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
1a230 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
1a240 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
1a250 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
1a260 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
1a270 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
1a280 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
1a290 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
1a2a0 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
1a2b0 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
1a2c0 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
1a2d0 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
1a2e0 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
1a2f0 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
1a300 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
1a310 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70  .*/.case OP_Reop
1a320 65 6e 49 64 78 3a 20 7b 0a 20 20 56 64 62 65 43  enIdx: {.  VdbeC
1a330 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
1a340 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1a350 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a360 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a370 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75  KEYINFO );.  pCu
1a380 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
1a390 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p1];.  if( pCu
1a3a0 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52  r && pCur->pgnoR
1a3b0 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70  oot==(u32)pOp->p
1a3c0 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  2 ){.    assert(
1a3d0 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d   pCur->iDb==pOp-
1a3e0 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47  >p3 );      /* G
1a3f0 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65  uaranteed by the
1a400 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1a410 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  */.    break;.  
1a420 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  }.  /* If the cu
1a430 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72  rsor is not curr
1a440 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73  ently open or is
1a450 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65   open on a diffe
1a460 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c  rent.  ** index,
1a470 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
1a480 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52  gh into OP_OpenR
1a490 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72  ead to force a r
1a4a0 65 6f 70 65 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20  eopen */.}.case 
1a4b0 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1a4c0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
1a4d0 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
1a4e0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1a4f0 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
1a500 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1a510 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
1a520 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
1a530 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
1a540 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28  Db;..  assert( (
1a550 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f  pOp->p5&(OPFLAG_
1a560 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42  P2ISREG|OPFLAG_B
1a570 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70  ULKCSR))==pOp->p
1a580 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  5 );.  assert( p
1a590 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1a5a0 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1a5b0 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p5==0 );.  asse
1a5c0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a5d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a5e0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a5f0 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f  enRead || pOp->o
1a600 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e  pcode==OP_Reopen
1a610 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c  Idx.          ||
1a620 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1a630 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70  );..  if( p->exp
1a640 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d  ired ){.    rc =
1a650 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20   SQLITE_ABORT;. 
1a660 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
1a670 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
1a680 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
1a690 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
1a6a0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1a6b0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1a6c0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1a6d0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a6e0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a6f0 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44  sk, iDb) );.  pD
1a700 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1a710 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1a720 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1a730 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1a740 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1a750 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
1a760 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73  Flag = 1;.    as
1a770 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1a780 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1a790 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1a7a0 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1a7b0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1a7c0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1a7d0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1a7e0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1a7f0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1a800 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1a810 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1a820 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1a830 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1a840 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1a850 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1a860 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1a870 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1a880 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
1a890 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1a8a0 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1a8b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1a8c0 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1a8d0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1a8e0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1a8f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1a900 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1a910 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1a920 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1a930 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1a940 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1a950 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1a960 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1a970 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1a980 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1a990 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1a9a0 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1a9b0 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1a9c0 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1a9d0 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1a9e0 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1a9f0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1aa00 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1aa10 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1aa20 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1aa30 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ion. */.    if( 
1aa40 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a  NEVER(p2<2) ) {.
1aa50 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1aa60 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
1aa70 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1aa80 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1aa90 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70     }.  }.  if( p
1aaa0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1aab0 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1aac0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1aad0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1aae0 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1aaf0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1ab00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1ab10 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1ab20 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1ab30 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70  eyInfo->nField+p
1ab40 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64  KeyInfo->nXField
1ab50 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1ab60 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1ab70 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
1ab80 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1ab90 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1aba0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1abb0 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29  ert( nField>=0 )
1abc0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46  ;.  testcase( nF
1abd0 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54  ield==0 );  /* T
1abe0 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45  able with INTEGE
1abf0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  R PRIMARY KEY an
1ac00 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a  d nothing else *
1ac10 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
1ac20 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1ac30 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1ac40 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
1ac50 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1ac60 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1ac70 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1ac80 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1ac90 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74    pCur->pgnoRoot
1aca0 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71   = p2;.  rc = sq
1acb0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1acc0 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
1acd0 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
1ace0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  >pCursor);.  pCu
1acf0 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1ad00 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
1ad10 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  ( OPFLAG_BULKCSR
1ad20 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  ==BTREE_BULKLOAD
1ad30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72   );.  sqlite3Btr
1ad40 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43  eeCursorHints(pC
1ad50 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f  ur->pCursor, (pO
1ad60 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42  p->p5 & OPFLAG_B
1ad70 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20  ULKCSR));..  /* 
1ad80 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
1ad90 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61  or.isTable varia
1ada0 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65  ble. Previous ve
1adb0 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
1adc0 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
1add0 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
1ade0 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
1adf0 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
1ae00 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
1ae10 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
1ae20 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
1ae30 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
1ae40 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
1ae50 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
1ae60 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
1ae70 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
1ae80 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
1ae90 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
1aea0 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  FO;.  break;.}..
1aeb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1aec0 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1aed0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1aee0 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1aef0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1af00 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1af10 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1af20 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1af30 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1af40 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1af50 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1af60 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1af70 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1af80 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1af90 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1afa0 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1afb0 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1afc0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
1afd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1afe0 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
1aff0 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
1b000 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
1b010 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
1b020 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
1b030 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
1b040 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
1b050 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
1b060 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
1b070 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
1b080 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
1b090 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
1b0a0 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
1b0b0 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
1b0c0 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1b0d0 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1b0e0 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1b0f0 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1b100 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1b110 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1b120 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1b130 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1b140 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1b150 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1b160 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1b170 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1b180 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1b190 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1b1a0 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1b1b0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
1b1c0 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1b1d0 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
1b1e0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1b1f0 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1b200 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1b210 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1b220 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1b230 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1b240 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1b250 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1b260 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1b270 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1b280 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1b290 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1b2a0 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1b2b0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1b2c0 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1b2d0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1b2e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b2f0 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
1b300 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
1b310 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
1b320 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
1b330 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1b340 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
1b350 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
1b360 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b370 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
1b380 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1b390 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
1b3a0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b3b0 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
1b3c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b3d0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1b3e0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1b3f0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1b400 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1b410 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1b420 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1b430 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b440 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1b450 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1b460 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1b470 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b480 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1b490 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1b4a0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1b4b0 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1b4c0 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1b4d0 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1b4e0 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1b4f0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1b500 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1b510 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1b520 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1b530 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1b540 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1b550 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1b560 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1b570 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1b580 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1b590 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1b5a0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1b5b0 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1b5c0 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1b5d0 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1b5e0 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1b5f0 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1b600 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1b610 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1b620 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1b630 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1b640 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1b650 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1b660 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1b670 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  ( (pKeyInfo = pO
1b680 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1b690 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1b6a0 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1b6b0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1b6c0 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1b6d0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b6e0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1b6f0 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1b700 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1b710 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1b720 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1b730 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1b740 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1b750 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1b760 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1b770 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1b780 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1b790 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1b7a0 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1b7b0 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1b7c0 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1b7d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1b7e0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1b7f0 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1b800 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78  1, pKeyInfo, pCx
1b810 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1b820 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1b830 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1b840 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1b850 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1b860 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d  rsor(pCx->pBt, M
1b870 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30  ASTER_ROOT, 1, 0
1b880 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1b890 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1b8a0 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1b8b0 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65   }.  pCx->isOrde
1b8c0 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1b8d0 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1b8e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1b8f0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1b900 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1b910 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1b920 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1b930 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1b940 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1b950 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1b960 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1b970 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1b980 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1b990 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1b9a0 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1b9b0 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1b9c0 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1b9d0 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1b9e0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1b9f0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1ba00 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1ba10 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1ba20 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1ba30 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1ba40 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1ba50 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1ba60 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1ba70 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1ba80 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1ba90 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1baa0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1bab0 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1bac0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1bad0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bae0 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1baf0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1bb00 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1bb10 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
1bb20 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1bb30 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1bb40 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1bb50 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
1bb60 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1bb70 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1bb80 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1bb90 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1bba0 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
1bbb0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1bbc0 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
1bbd0 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b  , pCx);.  break;
1bbe0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1bbf0 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1bc00 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1bc10 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1bc20 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1bc30 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1bc40 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1bc50 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1bc60 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1bc70 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1bc80 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1bc90 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1bca0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1bcb0 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1bcc0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1bcd0 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1bce0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1bcf0 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1bd00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1bd10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1bd20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1bd30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1bd40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1bd50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1bd60 43 2d 3e 70 53 6f 72 74 65 72 20 29 3b 0a 20 20  C->pSorter );.  
1bd70 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1bd80 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  t++)==0 ){.    p
1bd90 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1bda0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1bdb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1bdc0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1bdd0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1bde0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1bdf0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1be00 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1be10 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1be20 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1be30 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1be40 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1be50 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1be60 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1be70 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1be80 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1be90 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1bea0 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1beb0 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1bec0 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1bed0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1bee0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1bef0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1bf00 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1bf10 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1bf20 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1bf30 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1bf40 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1bf50 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1bf60 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1bf70 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1bf80 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1bf90 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1bfa0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1bfb0 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1bfc0 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1bfd0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1bfe0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1bff0 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1c000 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1c010 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1c020 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1c030 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1c040 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1c050 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1c060 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1c070 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1c080 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1c090 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c0a0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1c0b0 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1c0c0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1c0d0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1c0e0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1c0f0 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1c100 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1c110 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1c120 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1c130 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1c140 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1c150 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1c160 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1c170 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c180 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1c190 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1c1a0 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1c1b0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1c1c0 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1c1d0 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1c1e0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1c1f0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1c200 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1c210 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1c220 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c230 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c240 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1c250 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1c260 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1c270 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1c280 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1c290 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c2a0 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1c2b0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1c2c0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1c2d0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1c2e0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c2f0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1c300 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1c310 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1c320 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1c330 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1c340 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1c350 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c360 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c370 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c380 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c390 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c3a0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c3b0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c3c0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c3d0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c3e0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c3f0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1c400 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1c410 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1c420 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1c430 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1c440 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c450 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c460 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1c470 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1c480 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1c490 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1c4a0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1c4b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1c4c0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1c4d0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1c4e0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1c4f0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1c500 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1c510 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1c520 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1c530 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1c540 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1c550 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1c560 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1c570 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c580 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1c590 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
1c5a0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
1c5b0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1c5c0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1c5d0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1c5e0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c5f0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1c600 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1c610 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1c620 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1c630 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1c640 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1c650 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c660 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1c670 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1c680 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1c690 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1c6a0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1c6b0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1c6c0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1c6d0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1c6e0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1c6f0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1c700 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1c710 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1c720 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1c730 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1c740 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1c750 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1c760 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1c770 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1c780 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1c790 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1c7a0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1c7b0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1c7c0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1c7d0 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1c7e0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1c7f0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
1c800 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
1c810 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1c820 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1c830 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
1c840 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
1c850 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1c860 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
1c870 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1c880 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1c890 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
1c8a0 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
1c8b0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1c8c0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1c8d0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1c8e0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1c8f0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1c900 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1c910 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1c920 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1c930 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1c940 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1c950 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1c960 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1c970 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1c980 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1c990 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1c9a0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1c9b0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1c9c0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1c9d0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1c9e0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1c9f0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1ca00 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1ca10 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1ca20 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1ca30 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1ca40 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1ca50 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1ca60 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1ca70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1ca80 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1ca90 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1caa0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1cab0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1cac0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1cad0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1cae0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1caf0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1cb00 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1cb10 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1cb20 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1cb30 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1cb40 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1cb50 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1cb60 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1cb70 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
1cb80 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1cb90 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1cba0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1cbb0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1cbc0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1cbd0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1cbe0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1cbf0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1cc00 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1cc10 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1cc20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1cc30 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1cc40 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1cc50 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1cc60 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1cc70 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1cc80 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1cc90 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1cca0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1ccb0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1ccc0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1ccd0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1cce0 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1ccf0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1cd00 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1cd10 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1cd20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1cd30 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1cd40 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1cd50 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1cd60 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1cd70 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1cd80 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1cd90 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1cda0 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
1cdb0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1cdc0 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
1cdd0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
1cde0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1cdf0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1ce00 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1ce10 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
1ce20 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1ce30 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1ce40 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
1ce50 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1ce60 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1ce70 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1ce80 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1ce90 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1cea0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1ceb0 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1cec0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1ced0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1cee0 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1cef0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1cf00 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
1cf10 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1cf20 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
1cf30 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
1cf40 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
1cf50 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
1cf60 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1cf70 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
1cf80 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1cf90 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1cfa0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1cfb0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1cfc0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1cfd0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1cfe0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1cff0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1d000 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1d010 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d020 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
1d030 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
1d040 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
1d050 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
1d060 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
1d070 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
1d080 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d090 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
1d0a0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1d0b0 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1d0c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70  pOp->opcode;.  p
1d0d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1d0e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d0f0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1d100 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1d110 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d  #endif.  if( pC-
1d120 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
1d130 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1d140 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1d150 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1d160 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1d170 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
1d180 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1d190 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1d1a0 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1d1b0 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1d1c0 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1d1d0 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20  convert it. */. 
1d1e0 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
1d1f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66  pOp->p3];.    if
1d200 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1d210 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
1d220 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
1d230 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
1d240 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1d250 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
1d260 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
1d270 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1d280 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f  ue(pIn3);..    /
1d290 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1d2a0 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
1d2b0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1d2c0 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
1d2d0 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20  .    ** loss of 
1d2e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
1d2f0 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
1d300 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
1d310 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ... */.    if( (
1d320 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1d330 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
1d340 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1d350 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
1d360 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
1d370 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1d380 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
1d390 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
1d3a0 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
1d3b0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1d3c0 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1d3d0 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1d3e0 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1d3f0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1d400 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
1d410 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20  Taken(1,2);.    
1d420 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1d430 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1d440 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1d450 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
1d460 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1d470 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1d480 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1d490 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
1d4a0 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
1d4b0 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
1d4c0 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
1d4d0 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
1d4e0 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
1d4f0 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
1d500 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1d510 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
1d520 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
1d530 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1d540 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
1d550 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
1d560 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
1d570 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65  In3->u.r<(double
1d580 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1d590 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1d5a0 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31  GE==(OP_SeekGT-1
1d5b0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1d5c0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d  ert( OP_SeekLT==
1d5d0 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b  (OP_SeekLE-1) );
1d5e0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1d5f0 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78   (OP_SeekLE & 0x
1d600 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1d610 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  T & 0x0001) );. 
1d620 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1d630 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1d640 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
1d650 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
1d660 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1d670 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1d680 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
1d690 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1d6a0 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1d6b0 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1d6c0 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
1d6d0 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
1d6e0 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
1d6f0 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29  n3->u.r>(double)
1d700 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1d710 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1d720 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
1d730 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d740 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
1d750 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
1d760 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d770 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1d780 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
1d790 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1d7a0 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1d7b0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1d7c0 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
1d7d0 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
1d7e0 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
1d7f0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1d800 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1d810 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1d820 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1d830 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1d840 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
1d850 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
1d860 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
1d870 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d880 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1d890 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1d8a0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  }.  }else{.    n
1d8b0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1d8c0 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  i;.    assert( p
1d8d0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1d8e0 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65  NT32 );.    asse
1d8f0 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
1d900 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1d910 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1d920 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1d930 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20  16)nField;..    
1d940 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65  /* The next line
1d950 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65   of code compute
1d960 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e  s as follows, on
1d970 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a  ly faster:.    *
1d980 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
1d990 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGT || oc==OP_
1d9a0 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a  SeekLE ){.    **
1d9b0 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72       r.default_r
1d9c0 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20  c = -1;.    **  
1d9d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20   }else{.    **  
1d9e0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1d9f0 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = +1;.    **   }
1da00 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65  .    */.    r.de
1da10 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26  fault_rc = ((1 &
1da20 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54   (oc - OP_SeekLT
1da30 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20  )) ? -1 : +1);. 
1da40 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1da50 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65  P_SeekGT || r.de
1da60 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a  fault_rc==-1 );.
1da70 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1da80 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64  OP_SeekLE || r.d
1da90 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
1daa0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1dab0 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e  =OP_SeekGE || r.
1dac0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29  default_rc==+1 )
1dad0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1dae0 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72  !=OP_SeekLT || r
1daf0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
1db00 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  );..    r.aMem =
1db10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1db20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1db30 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
1db40 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1db50 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1db60 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1db70 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1db80 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e  #endif.    Expan
1db90 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20  dBlob(r.aMem);. 
1dba0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1dbb0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1dbc0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1dbd0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
1dbe0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1dbf0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1dc00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1dc10 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1dc20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65   }.  pC->deferre
1dc30 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
1dc40 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1dc50 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
1dc60 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1dc70 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
1dc80 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
1dc90 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53  f.  if( oc>=OP_S
1dca0 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74  eekGE ){  assert
1dcb0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc==OP_SeekGE 
1dcc0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  || oc==OP_SeekGT
1dcd0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c   );.    if( res<
1dce0 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1dcf0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29  oc==OP_SeekGT) )
1dd00 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
1dd10 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1dd20 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d  te3BtreeNext(pC-
1dd30 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1dd40 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1dd50 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1dd60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1dd70 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
1dd80 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1dd90 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1dda0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1ddb0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
1ddc0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
1ddd0 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1dde0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1ddf0 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
1de00 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1de10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1de20 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1de30 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1de40 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1de50 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1de60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1de70 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1de80 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
1de90 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
1dea0 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
1deb0 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
1dec0 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
1ded0 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
1dee0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1def0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
1df00 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f  eeEof(pC->pCurso
1df10 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
1df20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1df30 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  0 );.  VdbeBranc
1df40 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1df50 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
1df60 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1df70 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1df80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1df90 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a  Seek P1 P2 * * *
1dfa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
1dfb0 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  ntkey=r[P2].**.*
1dfc0 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1dfd0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1dfe0 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1dff0 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1e000 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1e010 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1e020 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1e030 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1e040 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1e050 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1e060 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1e070 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1e080 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1e090 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1e0a0 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1e0b0 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1e0c0 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1e0d0 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1e0e0 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1e0f0 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1e100 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1e110 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1e120 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e130 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1e140 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1e150 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e160 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e170 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1e180 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1e190 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e1a0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1e1b0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1e1c0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
1e1d0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d  [pOp->p2];.  pC-
1e1e0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1e1f0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1e200 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d  lue(pIn2);.  pC-
1e210 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1e220 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 1;.  break;.}.
1e230 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
1e240 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1e250 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e260 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1e270 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1e280 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1e290 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1e2a0 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1e2b0 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1e2c0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1e2d0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1e2e0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1e2f0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1e300 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1e310 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1e320 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1e330 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1e340 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1e350 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1e360 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
1e370 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1e380 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1e390 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
1e3a0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1e3b0 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
1e3c0 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
1e3d0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1e3e0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1e3f0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
1e400 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  re it can be.** 
1e410 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20  advanced in the 
1e420 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f  forward directio
1e430 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73  n.  The Next ins
1e440 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f  truction will wo
1e450 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74  rk,.** but not t
1e460 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  he Prev instruct
1e470 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1e480 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
1e490 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78  oConflict, NotEx
1e4a0 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a  ists. SeekGe.*/.
1e4b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
1e4c0 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1e4d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1e4e0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1e4f0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1e500 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1e510 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1e520 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1e530 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1e540 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e550 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1e560 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1e570 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1e580 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1e590 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
1e5a0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1e5b0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1e5c0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1e5d0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1e5e0 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
1e5f0 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1e600 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1e610 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
1e620 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
1e630 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
1e640 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
1e650 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
1e660 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
1e670 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
1e680 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1e690 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
1e6a0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1e6b0 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
1e6c0 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1e6d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
1e6e0 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
1e6f0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1e700 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
1e710 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
1e720 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
1e730 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
1e740 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
1e750 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
1e760 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
1e770 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
1e780 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1e790 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1e7a0 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
1e7b0 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
1e7c0 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
1e7d0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1e7e0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1e7f0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1e800 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1e810 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1e820 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1e830 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1e840 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1e850 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1e860 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1e870 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1e880 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1e890 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1e8a0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1e8b0 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1e8c0 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1e8d0 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1e8e0 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
1e8f0 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
1e900 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1e910 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
1e920 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
1e930 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
1e940 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
1e950 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
1e960 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
1e970 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
1e980 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
1e990 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
1e9a0 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
1e9b0 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
1e9c0 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
1e9d0 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
1e9e0 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
1e9f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
1ea00 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
1ea10 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
1ea20 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
1ea30 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
1ea40 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
1ea50 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
1ea60 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
1ea70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
1ea80 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
1ea90 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
1eaa0 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
1eab0 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
1eac0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  NULL..**.** This
1ead0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1eae0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1eaf0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1eb00 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
1eb10 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
1eb20 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
1eb30 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1eb40 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
1eb50 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
1eb60 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
1eb70 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
1eb80 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1eb90 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74  ound, Found, Not
1eba0 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f  Exists.*/.case O
1ebb0 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20  P_NoConflict:   
1ebc0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1ebd0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
1ebe0 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
1ebf0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1ec00 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
1ec10 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1ec20 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  /.  int alreadyE
1ec30 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b  xists;.  int ii;
1ec40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ec50 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
1ec60 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55  char *pFree;.  U
1ec70 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
1ec80 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
1ec90 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68  edRecord r;.  ch
1eca0 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e  ar aTempRec[ROUN
1ecb0 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b  D8(sizeof(Unpack
1ecc0 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a  edRecord)) + siz
1ecd0 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b  eof(Mem)*4 + 7];
1ece0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1ecf0 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e  TEST.  if( pOp->
1ed00 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e  opcode!=OP_NoCon
1ed10 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f  flict ) sqlite3_
1ed20 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  found_count++;.#
1ed30 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28  endif..  assert(
1ed40 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ed50 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1ed60 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1ed70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1ed80 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
1ed90 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1eda0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1edb0 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
1edc0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1edd0 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1ede0 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49  ode;.#endif.  pI
1edf0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1ee00 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
1ee10 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1ee20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1ee30 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70  sTable==0 );.  p
1ee40 46 72 65 65 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  Free = 0;  /* No
1ee50 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
1ee60 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
1ee70 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
1ee80 69 6e 67 2e 20 2a 2f 0a 20 20 69 66 28 20 70 4f  ing. */.  if( pO
1ee90 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
1eea0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1eeb0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1eec0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1eed0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
1eee0 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20  .aMem = pIn3;.  
1eef0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
1ef00 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
1ef10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
1ef20 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1ef30 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45  [ii]) );.      E
1ef40 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65  xpandBlob(&r.aMe
1ef50 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53  m[ii]);.#ifdef S
1ef60 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1ef70 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
1ef80 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1ef90 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
1efa0 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
1efb0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
1efc0 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
1efd0 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
1efe0 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b  3VdbeAllocUnpack
1eff0 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20  edRecord(.      
1f000 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20    pC->pKeyInfo, 
1f010 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
1f020 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72  (aTempRec), &pFr
1f030 65 65 0a 20 20 20 20 29 3b 20 0a 20 20 20 20 69  ee.    ); .    i
1f040 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
1f050 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
1f060 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1f070 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1f080 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1f090 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1f0a0 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f  M_Zero)==0 );  /
1f0b0 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65  * zeroblobs alre
1f0c0 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a  ady expanded */.
1f0d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
1f0e0 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e  ecordUnpack(pC->
1f0f0 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e  pKeyInfo, pIn3->
1f100 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78  n, pIn3->z, pIdx
1f110 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78  Key);.  }.  pIdx
1f120 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20  Key->default_rc 
1f130 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  = 0;.  if( pOp->
1f140 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e  opcode==OP_NoCon
1f150 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20  flict ){.    /* 
1f160 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e  For the OP_NoCon
1f170 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61  flict opcode, ta
1f180 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
1f190 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  ny of the.    **
1f1a0 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72   input fields ar
1f1b0 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e  e NULL, since an
1f1c0 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c  y key with a NUL
1f1d0 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a  L will not.    *
1f1e0 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20  * conflict */.  
1f1f0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
1f200 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
1f210 20 20 20 20 20 20 69 66 28 20 72 2e 61 4d 65 6d        if( r.aMem
1f220 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
1f230 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20  _Null ){.       
1f240 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1f250 31 3b 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  1; VdbeBranchTak
1f260 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20 20  en(1,2);.       
1f270 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1f280 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
1f290 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1f2a0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1f2b0 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
1f2c0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1f2d0 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d   if( pOp->p4.i==
1f2e0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
1f2f0 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65 65  DbFree(db, pFree
1f300 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  );.  }.  if( rc!
1f310 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1f320 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
1f330 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
1f340 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  res;.  alreadyEx
1f350 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1f360 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1f370 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73   1-alreadyExists
1f380 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
1f390 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1f3a0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1f3b0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
1f3c0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1f3d0 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
1f3e0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1f3f0 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30  alreadyExists!=0
1f400 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72  ,2);.    if( alr
1f410 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1f420 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1f430 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
1f440 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65  BranchTaken(alre
1f450 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b  adyExists==0,2);
1f460 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64  .    if( !alread
1f470 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1f480 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1f490 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f4a0 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
1f4b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1f4c0 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
1f4d0 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P3].**.** P1
1f4e0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
1f4f0 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f   a cursor open o
1f500 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62  n an SQL table b
1f510 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67  tree (with integ
1f520 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33  er.** keys).  P3
1f530 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72   is an integer r
1f540 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65  owid.  If P1 doe
1f550 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20  s not contain a 
1f560 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72  record with.** r
1f570 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d  owid P3 then jum
1f580 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1f590 20 50 32 2e 20 20 49 66 20 50 31 20 64 6f 65 73   P2.  If P1 does
1f5a0 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
1f5b0 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77 69 64 20  d.** with rowid 
1f5c0 50 33 20 74 68 65 6e 20 6c 65 61 76 65 20 74 68  P3 then leave th
1f5d0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
1f5e0 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
1f5f0 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20 74 68 72   and fall.** thr
1f600 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1f610 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
1f620 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
1f630 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
1f640 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
1f650 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
1f660 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
1f670 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
1f680 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
1f690 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1f6a0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1f6b0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1f6c0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
1f6d0 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
1f6e0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
1f6f0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1f700 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
1f710 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
1f720 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
1f730 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
1f740 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1f750 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1f760 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  nd, NoConflict.*
1f770 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1f780 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1f790 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1f7a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1f7b0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1f7c0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
1f7d0 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
1f7e0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1f7f0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
1f800 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1f810 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1f820 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f830 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f840 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1f850 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1f860 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1f870 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1f880 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
1f890 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  Op = 0;.#endif. 
1f8a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1f8b0 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
1f8c0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1f8d0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72  eReg==0 );.  pCr
1f8e0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1f8f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
1f900 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20  r!=0 );.  res = 
1f910 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  0;.  iKey = pIn3
1f920 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71  ->u.i;.  rc = sq
1f930 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1f940 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1f950 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
1f960 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  );.  pC->movetoT
1f970 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
1f980 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
1f990 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c  ete */.  pC->nul
1f9a0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  lRow = 0;.  pC->
1f9b0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1f9c0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
1f9d0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1f9e0 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  = 0;.  VdbeBranc
1f9f0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1fa00 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
1fa10 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1fa20 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  p2 - 1;.  }.  pC
1fa30 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
1fa40 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  es;.  break;.}..
1fa50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1fa60 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1fa70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
1fa80 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  2]=cursor[P1].ct
1fa90 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  r++.**.** Find t
1faa0 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
1fab0 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1fac0 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
1fad0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
1fae0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
1faf0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1fb00 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
1fb10 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
1fb20 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
1fb30 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
1fb40 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
1fb50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1fb60 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
1fb70 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1fb80 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
1fb90 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1fba0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1fbb0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1fbc0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1fbd0 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  ]!=0 );.  pOut->
1fbe0 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  u.i = p->apCsr[p
1fbf0 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e  Op->p1]->seqCoun
1fc00 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  t++;.  break;.}.
1fc10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77  ../* Opcode: New
1fc20 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
1fc30 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1fc40 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
1fc50 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1fc60 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1fc70 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1fc80 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1fc90 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1fca0 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1fcb0 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1fcc0 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1fcd0 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1fce0 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1fcf0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1fd00 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1fd10 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1fd20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1fd30 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1fd40 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1fd50 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1fd60 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
1fd70 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
1fd80 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
1fd90 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
1fda0 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
1fdb0 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1fdc0 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
1fdd0 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
1fde0 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
1fdf0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
1fe00 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
1fe10 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
1fe20 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
1fe30 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  n SQLITE_FULL er
1fe40 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1fe50 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
1fe60 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
1fe70 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
1fe80 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1fe90 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
1fea0 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
1feb0 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
1fec0 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
1fed0 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
1fee0 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
1fef0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
1ff00 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1ff10 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  e */.  i64 v;   
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ff30 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
1ff40 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1ff50 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
1ff60 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
1ff70 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
1ff80 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ffa0 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
1ffb0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1ffc0 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ffe0 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
1fff0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
20000 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
20010 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
20020 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
20030 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
20040 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
20050 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
20060 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
20070 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
20080 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
20090 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
200a0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
200b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
200c0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
200d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
200e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
200f0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
20100 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43  if( NEVER(pC->pC
20110 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20  ursor==0) ){.   
20120 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
20130 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
20140 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
20150 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
20160 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
20170 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
20180 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
20190 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
201a0 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
201b0 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
201c0 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
201d0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
201e0 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
201f0 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
20200 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
20210 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
20220 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
20230 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
20240 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
20250 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
20260 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
20270 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
20280 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
20290 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
202a0 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
202b0 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
202c0 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
202d0 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
202e0 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
202f0 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
20300 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
20310 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
20320 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
20330 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
20340 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
20350 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
20360 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
20370 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
20380 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
20390 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
203a0 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
203b0 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
203c0 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
203d0 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
203e0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
203f0 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
20400 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
20410 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
20420 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
20430 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
20440 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
20450 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
20460 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
20470 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
20480 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
20490 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
204a0 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
204b0 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
204c0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
204d0 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
204e0 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
204f0 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
20500 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
20510 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
20520 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
20530 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
20540 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
20550 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
20560 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
20570 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
20580 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
20590 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
205a0 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
205b0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
205c0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
205d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
205e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
205f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
20600 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
20610 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
20620 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
20630 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
20640 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
20650 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
20660 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
20670 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29  d(pC->pCursor) )
20680 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
20690 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
206a0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
206b0 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  &v);.        ass
206c0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
206d0 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f  OK );   /* Canno
206e0 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67  t fail following
206f0 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a   BtreeLast() */.
20700 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
20710 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
20720 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
20730 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
20740 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20750 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
20760 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
20770 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  987 */.        }
20780 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
20790 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
207a0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
207b0 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  T.    if( pOp->p
207c0 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73  3 ){.      /* As
207d0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
207e0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
207f0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ell. */.      as
20800 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
20810 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
20820 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
20830 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
20840 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
20850 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
20860 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
20870 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  ;.        /* Ass
20880 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
20890 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
208a0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
208b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
208c0 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a  pFrame->nMem );.
208d0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
208e0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
208f0 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  ->p3];.      }el
20900 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  se{.        /* A
20910 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
20920 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
20930 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
20940 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20950 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
20960 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
20970 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
20980 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
20990 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
209a0 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  e(p, pMem);.    
209b0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
209c0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65  ( memIsValid(pMe
209d0 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47  m) );..      REG
209e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
209f0 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
20a00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
20a10 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
20a20 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20a30 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
20a40 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
20a50 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
20a60 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
20a70 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
20a80 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
20a90 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
20aa0 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  id ){.        rc
20ab0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
20ac0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37    /* IMP: R-1227
20ad0 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20  5-61338 */.     
20ae0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20af0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20b00 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c    }.      if( v<
20b10 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
20b20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
20b30 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
20b40 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e  }.      pMem->u.
20b50 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e  i = v;.    }.#en
20b60 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  dif.    if( pC->
20b70 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
20b80 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
20b90 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
20ba0 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
20bb0 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
20bc0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
20bd0 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
20be0 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
20bf0 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
20c00 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
20c10 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
20c20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
20c30 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
20c40 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
20c50 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
20c60 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
20c70 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
20c80 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
20c90 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
20ca0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
20cb0 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
20cc0 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
20cd0 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
20ce0 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d00 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
20d10 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
20d20 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
20d30 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
20d40 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
20d50 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
20d60 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20   &v);.        v 
20d70 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
20d80 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75  ); v++;  /* Ensu
20d90 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65  re that v is gre
20da0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a  ater than zero *
20db0 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  /.      }while( 
20dc0 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42   ((rc = sqlite3B
20dd0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
20de0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
20df0 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
20e30 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
20e40 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
20e50 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
20e60 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
20e70 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
20e80 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
20e90 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
20ea0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
20eb0 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
20ec0 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
20ed0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
20ee0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20ef0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20f00 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
20f10 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
20f20 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
20f30 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
20f40 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
20f50 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
20f60 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
20f70 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
20f80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20f90 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
20fa0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
20fb0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
20fc0 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
20fd0 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
20fe0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
20ff0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
21000 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
21010 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
21020 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
21030 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
21040 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
21050 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
21060 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
21070 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
21080 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
21090 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
210a0 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
210b0 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
210c0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
210d0 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
210e0 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
210f0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
21100 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
21110 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
21120 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
21130 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
21140 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
21150 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
21160 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
21170 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
21180 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
21190 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
211a0 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
211b0 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
211c0 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
211d0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
211e0 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
211f0 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
21200 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
21210 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
21220 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
21230 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
21240 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
21250 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
21260 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
21270 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73  tExists) was a s
21280 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69  uccess, then thi
21290 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
212a0 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
212b0 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
212c0 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
212d0 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
212e0 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
212f0 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
21300 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
21310 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
21320 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
21330 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
21340 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
21350 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
21360 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
21370 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
21380 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
21390 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
213a0 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
213b0 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
213c0 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
213d0 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
213e0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
213f0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
21400 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
21410 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
21420 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
21430 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
21440 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
21450 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
21460 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
21470 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
21480 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
21490 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
214a0 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
214b0 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
214c0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
214d0 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
214e0 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
214f0 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
21500 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61  ing the table-na
21510 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65  me, or.** may be
21520 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
21530 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
21540 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a  he update-hook .
21550 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ** (sqlite3.xUpd
21560 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
21570 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e  invoked followin
21580 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
21590 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
215a0 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
215b0 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
215c0 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
215d0 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
215e0 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
215f0 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
21600 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
21610 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
21620 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
21630 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
21640 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
21650 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
21660 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
21670 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
21680 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
21690 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
216a0 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
216b0 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
216c0 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
216d0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
216e0 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
216f0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
21700 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
21710 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
21720 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
21730 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
21740 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
21750 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
21760 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
21770 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
21780 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
21790 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
217a0 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
217b0 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
217c0 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
217d0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
217e0 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
217f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
21800 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
21810 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
21820 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
21830 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
21840 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
21850 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
21860 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
21870 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
21880 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
21890 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
218a0 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
218b0 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
218c0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
218d0 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
218e0 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
218f0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
21900 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
21910 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
21920 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
21930 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
21940 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
21950 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
21960 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21970 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
21980 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
21990 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
219a0 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
219b0 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
219c0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
219d0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
219e0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
219f0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
21a00 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
21a10 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
21a20 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
21a30 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
21a40 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
21a50 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
21a60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
21a70 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
21a80 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
21a90 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
21aa0 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
21ab0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
21ac0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
21ad0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21ae0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21af0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
21b00 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
21b10 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21b20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21b30 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21b40 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
21b50 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
21b60 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
21b70 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
21b80 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21b90 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
21ba0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
21bb0 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
21bc0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
21bd0 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
21be0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21bf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
21c00 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
21c10 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
21c20 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
21c30 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
21c40 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21c50 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b  3, pKey);.    iK
21c60 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
21c70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21c80 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
21c90 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
21ca0 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70  ;.    iKey = pOp
21cb0 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
21cc0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
21cd0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
21ce0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
21cf0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
21d00 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
21d10 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
21d20 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
21d30 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
21d40 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
21d50 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
21d60 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
21d70 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
21d80 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
21d90 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
21da0 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
21db0 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
21dc0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
21dd0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
21de0 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
21df0 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
21e00 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
21e10 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
21e20 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
21e30 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
21e40 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
21e50 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
21e60 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
21e70 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
21e80 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
21ea0 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
21eb0 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
21ee0 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
21ef0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
21f00 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21f10 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
21f20 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21f30 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
21f40 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
21f50 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
21f60 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
21f70 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
21f80 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
21f90 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
21fa0 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
21fb0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
21fc0 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
21fd0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
21fe0 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
21ff0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
22000 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
22010 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
22020 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
22030 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22040 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
22050 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
22060 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
22070 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
22080 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
22090 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
220a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
220b0 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
220c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
220d0 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
220e0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
220f0 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
22100 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
22110 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
22120 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
22130 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
22140 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
22150 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
22160 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
22170 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
22180 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
22190 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
221a0 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
221b0 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
221c0 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
221d0 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
221e0 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
221f0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
22200 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  ext loop..**.** 
22210 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
22220 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
22230 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
22240 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
22250 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
22260 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
22270 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
22280 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
22290 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
222a0 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
222b0 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
222c0 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
222d0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
222e0 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  LL, then it is t
222f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
22300 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a  able that P1 is.
22310 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ** pointing to. 
22320 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   The update hook
22330 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
22340 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
22350 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
22360 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31  NULL then the P1
22370 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
22380 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
22390 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  d.** using OP_No
223a0 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
223b0 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
223c0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
223d0 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  _Delete: {.  Vdb
223e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
223f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22400 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22410 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
22420 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22430 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22440 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22450 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
22460 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
22470 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
22480 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
22490 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
224a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
224b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64  veto==0 );..#ifd
224c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
224d0 20 20 2f 2a 20 54 68 65 20 73 65 65 6b 20 6f 70    /* The seek op
224e0 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
224f0 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
22500 6f 72 20 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44  or prior to OP_D
22510 65 6c 65 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20  elete will.  ** 
22520 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68  have also set th
22530 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  e pC->movetoTarg
22540 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20  et field to the 
22550 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77  rowid of the row
22560 20 74 68 61 74 0a 20 20 2a 2a 20 69 73 20 62 65   that.  ** is be
22570 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20  ing deleted */. 
22580 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26   if( pOp->p4.z &
22590 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
225a0 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20  .    i64 iKey = 
225b0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  0;.    sqlite3Bt
225c0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
225d0 43 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a  Cursor, &iKey);.
225e0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
225f0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
22600 65 79 20 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69  ey ); .  }.#endi
22610 66 0a 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  f. .  rc = sqlit
22620 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
22630 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
22640 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
22650 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
22660 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
22670 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
22680 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
22690 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
226a0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
226b0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
226c0 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
226d0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   ){.    db->xUpd
226e0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
226f0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
22700 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20  TE_DELETE,.     
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69     db->aDb[pC->i
22730 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e  Db].zName, pOp->
22740 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f  p4.z, pC->moveto
22750 54 61 72 67 65 74 29 3b 0a 20 20 20 20 61 73 73  Target);.    ass
22760 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
22770 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
22780 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
22790 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
227a0 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
227b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
227c0 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
227d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
227e0 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
227f0 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
22800 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
22810 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
22820 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
22830 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
22840 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
22850 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
22860 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
22870 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
22880 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
22890 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
228a0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
228b0 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
228c0 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
228d0 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
228e0 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
228f0 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
22900 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
22910 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22920 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
22930 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
22940 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b   Synopsis:  if k
22950 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
22960 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
22970 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
22980 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
22990 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
229a0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
229b0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
229c0 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
229d0 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
229e0 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
229f0 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
22a00 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
22a10 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
22a20 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
22a30 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
22a40 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
22a50 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
22a60 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
22a70 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
22a80 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
22a90 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
22aa0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
22ab0 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
22ac0 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
22ad0 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
22ae0 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
22af0 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
22b00 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
22b10 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
22b20 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
22b30 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
22b40 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
22b50 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
22b60 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
22b70 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
22b80 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
22b90 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
22ba0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
22bb0 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
22bc0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
22bd0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
22be0 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
22bf0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
22c00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22c10 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
22c20 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
22c30 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
22c40 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
22c50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
22c60 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
22c70 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
22c80 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
22c90 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
22ca0 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
22cb0 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
22cc0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
22cd0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
22ce0 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
22cf0 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
22d00 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20    break;.};../* 
22d10 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61  Opcode: SorterDa
22d20 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ta P1 P2 P3 * *.
22d30 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
22d40 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
22d50 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
22d60 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74  r P2 the current
22d70 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72   sorter data for
22d80 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50   sorter cursor P
22d90 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72  1..** Then clear
22da0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64   the column head
22db0 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73  er cache on curs
22dc0 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P3..**.** Thi
22dd0 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d  s opcode is norm
22de0 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65  ally use to move
22df0 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66   a record out of
22e00 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20   the sorter and 
22e10 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74  into.** a regist
22e20 65 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73  er that is the s
22e30 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75  ource for a pseu
22e40 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20  do-table cursor 
22e50 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
22e60 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68   OpenPseudo.  Th
22e70 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  at pseudo-table 
22e80 63 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e  cursor is the on
22e90 65 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69  e that is identi
22ea0 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d  fied by.** param
22eb0 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69  eter P3.  Cleari
22ec0 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e  ng the P3 column
22ed0 20 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f   cache as part o
22ee0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61  f this opcode sa
22ef0 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68  ves.** us from h
22f00 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61  aving to issue a
22f10 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f   separate NullRo
22f20 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  w instruction to
22f30 20 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68   clear that cach
22f40 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  e..*/.case OP_So
22f50 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64  rterData: {.  Vd
22f60 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
22f70 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
22f80 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70  p->p2];.  pC = p
22f90 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22fa0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
22fb0 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63  rter(pC) );.  rc
22fc0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
22fd0 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70  rterRowkey(pC, p
22fe0 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Out);.  assert( 
22ff0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc!=SQLITE_OK ||
23000 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20   (pOut->flags & 
23010 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61  MEM_Blob) );.  a
23020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23030 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23040 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 2d 3e  nCursor );.  p->
23050 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e  apCsr[pOp->p3]->
23060 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23070 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
23080 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23090 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
230a0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
230b0 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
230c0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
230d0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
230e0 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
230f0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
23100 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
23110 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
23120 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
23130 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
23140 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
23150 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
23160 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
23170 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
23180 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
23190 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
231a0 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
231b0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
231c0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
231d0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
231e0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
231f0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
23200 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
23210 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23220 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a  psis: r[P2]=key.
23230 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23240 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23250 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
23260 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
23270 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
23280 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
23290 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
232a0 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
232b0 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
232c0 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
232d0 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
232e0 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
232f0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
23300 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
23310 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
23320 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
23330 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
23340 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
23350 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
23360 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
23370 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
23380 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
23390 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
233a0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
233b0 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
233c0 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
233d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
233e0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
233f0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
23400 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
23410 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
23420 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
23430 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
23440 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
23450 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23460 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23470 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23480 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23490 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
234a0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29  sSorter(pC)==0 )
234b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
234c0 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
234d0 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61  opcode!=OP_RowDa
234e0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
234f0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c  pC->isTable==0 |
23500 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
23510 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
23520 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23530 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
23540 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
23550 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
23560 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
23570 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
23580 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
23590 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
235a0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
235b0 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77  owKey and OP_Row
235c0 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77  Data opcodes alw
235d0 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f  ays follow OP_No
235e0 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20  tExists or.  ** 
235f0 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78  OP_Rewind/Op_Nex
23600 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76  t with no interv
23610 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  ening instructio
23620 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e  ns that might in
23630 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68  validate.  ** th
23640 65 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68  e cursor.  If th
23650 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65  is where not the
23660 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65   case, on of the
23670 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
23680 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20  t()s.  ** would 
23690 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68  fail.  Should th
236a0 69 73 20 65 76 65 72 20 63 68 61 6e 67 65 20 28  is ever change (
236b0 62 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67  because of chang
236c0 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20  es in the code. 
236d0 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74   ** generator) t
236e0 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c  hen the fix woul
236f0 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61  d be to insert a
23700 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
23710 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
23720 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20  oveto()..  */.  
23730 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
23740 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
23750 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
23760 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
23770 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23  alid(pCrsr) );.#
23780 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71  if 0  /* Not req
23790 75 69 72 65 64 20 64 75 65 20 74 6f 20 74 68 65  uired due to the
237a0 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73   previous to ass
237b0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
237c0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
237d0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
237e0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
237f0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
23800 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23810 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
23820 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
23830 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
23840 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
23850 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  );.    VVA_ONLY(
23860 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
23870 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
23880 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65   &n64);.    asse
23890 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
238a0 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  K );    /* True 
238b0 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
238c0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
238d0 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  bove */.    if( 
238e0 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
238f0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
23900 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
23910 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
23920 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36  .    n = (u32)n6
23930 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  4;.  }else{.    
23940 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
23950 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
23960 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a  ize(pCrsr, &n);.
23970 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
23980 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
23990 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
239a0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
239b0 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
239c0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
239d0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
239e0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
239f0 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 74  g;.    }.  }.  t
23a00 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b  estcase( n==0 );
23a10 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
23a20 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
23a30 69 7a 65 28 70 4f 75 74 2c 20 4d 41 58 28 6e 2c  ize(pOut, MAX(n,
23a40 33 32 29 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  32)) ){.    goto
23a50 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70   no_mem;.  }.  p
23a60 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65  Out->n = n;.  Me
23a70 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
23a80 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  t, MEM_Blob);.  
23a90 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  if( pC->isTable=
23aa0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
23ab0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70  qlite3BtreeKey(p
23ac0 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
23ad0 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->z);.  }else{. 
23ae0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
23af0 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20  treeData(pCrsr, 
23b00 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
23b10 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
23b20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
23b30 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
23b40 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74  lob is ever cast
23b50 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50   to text */.  UP
23b60 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
23b70 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53  E(pOut);.  REGIS
23b80 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
23b90 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
23ba0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23bb0 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a   Rowid P1 P2 * *
23bc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
23bd0 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
23be0 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
23bf0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
23c00 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
23c10 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
23c20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
23c30 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
23c40 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
23c50 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
23c60 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
23c70 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
23c80 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
23c90 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
23ca0 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
23cb0 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
23cc0 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
23cd0 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
23ce0 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
23cf0 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
23d00 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
23d10 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23d30 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
23d40 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23d50 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
23d60 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
23d70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
23d80 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
23d90 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
23da0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23db0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23dc0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23dd0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23de0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23df0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23e00 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
23e10 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  =0 || pC->nullRo
23e20 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  w );.  if( pC->n
23e30 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f  ullRow ){.    pO
23e40 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
23e50 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Null;.    break;
23e60 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
23e70 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
23e80 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d  ){.    v = pC->m
23e90 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66  ovetoTarget;.#if
23ea0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23eb0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
23ec0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56  }else if( pC->pV
23ed0 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  tabCursor ){.   
23ee0 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74   pVtab = pC->pVt
23ef0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
23f00 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
23f10 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
23f20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
23f30 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
23f40 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
23f50 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62  xRowid(pC->pVtab
23f60 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
23f70 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
23f80 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
23f90 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  b);.#endif /* SQ
23fa0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
23fb0 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73  LTABLE */.  }els
23fc0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
23fd0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
23fe0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23ff0 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f  3VdbeCursorResto
24000 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  re(pC);.    if( 
24010 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
24020 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24030 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24040 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
24050 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
24060 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
24070 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c  ITE_OK );  /* Al
24080 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20  ways so because 
24090 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f 72 65  of CursorRestore
240a0 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 7d 0a  () above */.  }.
240b0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
240c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
240d0 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
240e0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
240f0 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
24100 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
24110 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
24120 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
24130 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
24140 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
24150 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
24160 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
24170 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
24180 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
24190 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
241a0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
241b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
241c0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
241d0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
241e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
241f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24200 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
24210 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  1;.  pC->cacheSt
24220 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24230 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43  LE;.  if( pC->pC
24240 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  ursor ){.    sql
24250 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75  ite3BtreeClearCu
24260 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72  rsor(pC->pCursor
24270 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
24280 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  }../* Opcode: La
24290 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
242a0 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
242b0 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
242c0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
242d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
242e0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
242f0 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
24300 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
24310 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
24320 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
24330 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
24340 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
24350 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
24360 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
24370 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
24380 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
24390 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
243a0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
243b0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
243c0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
243d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
243e0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
243f0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
24400 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
24410 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
24420 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
24430 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
24440 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24450 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
24460 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
24470 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
24480 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  xt..*/.case OP_L
24490 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
244a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
244b0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
244c0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
244d0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
244e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
244f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24500 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24510 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24530 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
24540 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65  C->pCursor;.  re
24550 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
24560 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
24570 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24580 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  Last(pCrsr, &res
24590 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
245a0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
245b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
245c0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
245d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
245e0 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
245f0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
24600 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73  >seekOp = OP_Las
24610 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
24620 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
24630 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
24640 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
24650 69 66 28 20 72 65 73 20 29 20 70 63 20 3d 20 70  if( res ) pc = p
24660 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
24670 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
24680 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
24690 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
246a0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
246b0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
246c0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
246d0 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
246e0 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
246f0 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
24700 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
24710 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
24720 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
24730 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
24740 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
24750 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
24760 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
24770 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
24780 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
24790 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
247a0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
247b0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
247c0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
247d0 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
247e0 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
247f0 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
24800 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
24810 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
24820 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
24830 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
24840 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
24850 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
24860 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
24870 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
24880 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
24890 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
248a0 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
248b0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
248c0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
248d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
248e0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
248f0 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
24900 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
24910 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
24920 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
24930 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
24940 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
24950 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
24960 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
24970 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
24980 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
24990 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
249a0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
249b0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
249c0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
249d0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
249e0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
249f0 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
24a00 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
24a10 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
24a20 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
24a30 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
24a40 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
24a50 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
24a60 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
24a70 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
24a80 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
24a90 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
24aa0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
24ab0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
24ac0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
24ad0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
24ae0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
24af0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
24b00 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
24b10 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
24b20 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
24b30 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
24b40 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
24b50 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
24b60 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
24b70 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
24b80 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
24b90 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
24ba0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
24bb0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
24bc0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
24bd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24be0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24bf0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24c00 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24c10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24c20 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24c30 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
24c40 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
24c50 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
24c60 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
24c70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24c80 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
24c90 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
24ca0 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
24cb0 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
24cc0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
24cd0 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
24ce0 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
24cf0 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
24d00 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  >pCursor;.    as
24d10 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
24d20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
24d30 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
24d40 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
24d50 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
24d60 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
24d70 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24d80 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 43 2d  STALE;.  }.  pC-
24d90 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
24da0 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
24db0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
24dc0 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56  p2<p->nOp );.  V
24dd0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
24de0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
24df0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
24e00 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
24e10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24e20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
24e30 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
24e40 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
24e50 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
24e60 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
24e70 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
24e80 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
24e90 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
24ea0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
24eb0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
24ec0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
24ed0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
24ee0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
24ef0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
24f00 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
24f10 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
24f20 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
24f30 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
24f40 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
24f50 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
24f60 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
24f70 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
24f80 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
24f90 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
24fa0 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
24fb0 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
24fc0 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
24fd0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
24fe0 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
24ff0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
25000 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
25010 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
25020 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
25030 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
25040 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
25050 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
25060 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
25070 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
25080 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
25090 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
250a0 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
250b0 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
250c0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
250d0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
250e0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
250f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
25100 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
25110 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
25120 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
25130 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
25140 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
25150 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
25160 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
25170 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
25180 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
25190 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
251a0 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
251b0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
251c0 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
251d0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
251e0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
251f0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
25200 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
25210 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
25220 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
25230 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
25240 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
25250 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65   Prev, NextIfOpe
25260 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  n.*/./* Opcode: 
25270 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32  NextIfOpen P1 P2
25280 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
25290 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
252a0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74  s just like Next
252b0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
252c0 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
252d0 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
252e0 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
252f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
25300 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
25310 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
25320 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
25330 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
25340 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
25350 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
25360 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
25370 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
25380 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
25390 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
253a0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
253b0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
253c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
253d0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
253e0 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
253f0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
25400 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
25410 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ..**.**.** The P
25420 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
25430 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69  ly valid followi
25440 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65  ng an SeekLT, Se
25450 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c  ekLE, or.** OP_L
25460 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ast opcode used 
25470 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
25480 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73  cursor.  Prev is
25490 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
254a0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54  to follow SeekGT
254b0 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f  , SeekGE, or OP_
254c0 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  Rewind..**.** Th
254d0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
254e0 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
254f0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
25500 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31  do-table.  If P1
25510 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20   is.** not open 
25520 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
25530 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
25540 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
25550 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
25560 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
25570 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
25580 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
25590 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
255a0 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
255b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
255c0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
255d0 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
255e0 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
255f0 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
25600 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
25610 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
25620 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
25630 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
25640 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
25650 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
25660 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
25670 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
25680 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a  Previous()..**.*
25690 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
256a0 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
256b0 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
256c0 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
256d0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
256e0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
256f0 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
25700 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ented..*/./* Opc
25710 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20  ode: PrevIfOpen 
25720 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
25730 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
25740 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
25750 20 50 72 65 76 20 65 78 63 65 70 74 20 74 68 61   Prev except tha
25760 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69  t if cursor P1 i
25770 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74  s not.** open it
25780 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70   behaves a no-op
25790 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
257a0 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a  terNext: {  /* j
257b0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
257c0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
257d0 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  es;..  pC = p->a
257e0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
257f0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
25800 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d  r(pC) );.  res =
25810 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
25820 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
25830 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a  (db, pC, &res);.
25840 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c    goto next_tail
25850 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66  ;.case OP_PrevIf
25860 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
25870 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
25880 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
25890 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61  mp */.  if( p->a
258a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30  pCsr[pOp->p1]==0
258b0 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
258c0 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63  all through */.c
258d0 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
258e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
258f0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20  .case OP_Next:  
25900 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
25910 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
25920 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25930 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25940 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25950 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  p5<ArraySize(p->
25960 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70  aCounter) );.  p
25970 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
25980 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70  ->p1];.  res = p
25990 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
259a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
259b0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
259c0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
259d0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
259e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
259f0 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d   res==0 || (res=
25a00 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =1 && pC->isTabl
25a10 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63  e==0) );.  testc
25a20 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20  ase( res==1 );. 
25a30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
25a40 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
25a50 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
25a60 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
25a70 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
25a80 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
25a90 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
25aa0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
25ab0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
25ac0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25ad0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
25ae0 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  tIfOpen || pOp->
25af0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
25b00 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
25b10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25b20 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
25b30 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
25b40 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
25b50 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29  e3BtreePrevious)
25b60 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74  ;..  /* The Next
25b70 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
25b80 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47  used after SeekG
25b90 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52  T, SeekGE, and R
25ba0 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20  ewind..  ** The 
25bb0 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
25bc0 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
25bd0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61  eekLT, SeekLE, a
25be0 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73  nd Last. */.  as
25bf0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25c00 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
25c10 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
25c20 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  xtIfOpen.       
25c30 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
25c40 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e  P_SeekGT || pC->
25c50 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
25c60 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
25c70 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e  seekOp==OP_Rewin
25c80 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  d || pC->seekOp=
25c90 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73  =OP_Found);.  as
25ca0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25cb0 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
25cc0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
25cd0 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  evIfOpen.       
25ce0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
25cf0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
25d00 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
25d10 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
25d20 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
25d30 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  );..  rc = pOp->
25d40 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
25d50 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
25d60 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
25d70 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
25d80 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
25d90 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
25da0 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s==0,2);.  if( r
25db0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d  es==0 ){.    pC-
25dc0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
25dd0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
25de0 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   1;.    p->aCoun
25df0 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
25e00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
25e10 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
25e20 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
25e30 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20  endif.  }else{. 
25e40 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
25e50 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
25e60 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
25e70 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
25e80 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
25e90 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
25ea0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
25eb0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
25ec0 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
25ed0 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
25ee0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
25ef0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
25f00 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
25f10 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
25f20 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
25f30 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
25f40 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
25f50 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
25f60 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
25f70 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
25f80 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
25f90 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
25fa0 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
25fb0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
25fc0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
25fd0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
25fe0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
25ff0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
26000 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
26010 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
26020 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
26030 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
26040 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
26050 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
26060 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
26070 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
26080 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
26090 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
260a0 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
260b0 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  he cursor must h
260c0 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65  ave.** just done
260d0 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73   a seek to the s
260e0 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65  pot where the ne
260f0 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65  w entry is to be
26100 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68   inserted..** Th
26110 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64  is flag avoids d
26120 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65  oing an extra se
26130 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ek..**.** This i
26140 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
26150 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
26160 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
26170 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
26180 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
26190 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
261a0 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
261b0 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
261c0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
261d0 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
261e0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
261f0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
26200 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
26210 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e   int nKey;.  con
26220 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a  st char *zKey;..
26230 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26240 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26250 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26260 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26270 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26280 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
26290 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
262a0 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
262b0 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
262c0 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
262d0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
262e0 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
262f0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
26300 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
26310 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
26320 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26330 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
26340 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74  ange++;.  assert
26350 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
26360 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
26370 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ble==0 );.  rc =
26380 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
26390 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
263a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
263b0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
263c0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
263d0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
263e0 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
263f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
26400 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
26410 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
26420 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
26430 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
26440 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
26450 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
26460 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
26470 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
26480 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
26490 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
264a0 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
264b0 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
264c0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
264d0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
264e0 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
264f0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
26500 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
26510 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26520 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
26530 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
26540 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
26550 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
26560 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
26570 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
26580 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
26590 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
265a0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
265b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
265c0 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
265d0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
265e0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
265f0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
26600 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
26610 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26620 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
26630 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
26640 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
26650 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
26660 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
26670 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
26680 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
26690 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
266a0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
266b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
266c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
266d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
266e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
266f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26700 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
26710 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
26720 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
26730 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26740 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
26750 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
26760 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
26770 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
26780 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c  ->p3;.  r.defaul
26790 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d  t_rc = 0;.  r.aM
267a0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
267b0 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
267c0 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
267d0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
267e0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
267f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
26800 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
26810 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  }.#endif.  rc = 
26820 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
26830 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
26840 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
26850 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
26860 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
26870 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
26880 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
26890 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73  pCrsr);.  }.  as
268a0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
268b0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
268c0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
268d0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
268e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
268f0 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
26900 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
26910 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
26920 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
26930 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26940 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
26950 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
26960 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
26970 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
26980 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
26990 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
269a0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
269b0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
269c0 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
269d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
269e0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
269f0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
26a00 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
26a10 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
26a20 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
26a30 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
26a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
26a50 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
26a60 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
26a70 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
26a80 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
26a90 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
26aa0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26ab0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26ac0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26ad0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26ae0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26af0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
26b00 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
26b10 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70   pCrsr!=0 );.  p
26b20 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
26b30 5f 4e 75 6c 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Null;.  assert(
26b40 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
26b50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26b60 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
26b70 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69  =0 );..  /* sqli
26b80 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74  te3VbeCursorRest
26b90 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66  ore() can only f
26ba0 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72  ail if the recor
26bb0 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  d has been delet
26bc0 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d  ed.  ** out from
26bd0 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f   under the curso
26be0 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65  r.  That will ne
26bf0 76 65 72 20 68 61 70 70 65 6e 64 20 66 6f 72 20  ver happend for 
26c00 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a  an IdxRowid.  **
26c10 20 6f 70 63 6f 64 65 2c 20 68 65 6e 63 65 20 74   opcode, hence t
26c20 68 65 20 4e 45 56 45 52 28 29 20 61 72 72 6f 75  he NEVER() arrou
26c30 6e 64 20 74 68 65 20 63 68 65 63 6b 20 6f 66 20  nd the check of 
26c40 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
26c50 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ..  */.  rc = sq
26c60 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
26c70 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 69 66  estore(pC);.  if
26c80 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
26c90 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
26ca0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
26cb0 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  ;..  if( !pC->nu
26cc0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77  llRow ){.    row
26cd0 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  id = 0;  /* Not 
26ce0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
26cf0 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
26d00 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
26d10 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26d20 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72  IdxRowid(db, pCr
26d30 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  sr, &rowid);.   
26d40 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
26d50 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
26d60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26d70 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ror;.    }.    p
26d80 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
26d90 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
26da0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  s = MEM_Int;.  }
26db0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26dc0 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31  Opcode: IdxGE P1
26dd0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
26de0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
26df0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
26e00 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
26e10 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
26e20 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
26e30 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
26e40 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
26e50 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
26e60 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
26e70 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
26e80 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
26e90 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
26ea0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
26eb0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
26ec0 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
26ed0 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
26ee0 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
26ef0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
26f00 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
26f10 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
26f20 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
26f30 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
26f40 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
26f50 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
26f60 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
26f70 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
26f80 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50  e: IdxGT P1 P2 P
26f90 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
26fa0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
26fb0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
26fc0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
26fd0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
26fe0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
26ff0 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
27000 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
27010 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
27020 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
27030 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
27040 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
27050 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27060 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27070 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
27080 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
27090 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
270a0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
270b0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
270c0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
270d0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
270e0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
270f0 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
27100 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
27110 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
27120 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
27130 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33  : IdxLT P1 P2 P3
27140 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
27150 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
27160 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
27170 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
27180 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
27190 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
271a0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
271b0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
271c0 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
271d0 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
271e0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
271f0 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
27200 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
27210 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
27220 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
27230 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
27240 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
27250 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
27260 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
27270 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
27280 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
27290 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
272a0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61  .** Otherwise fa
272b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
272c0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
272d0 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
272e0 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33  : IdxLE P1 P2 P3
272f0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
27300 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
27310 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
27320 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
27330 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
27340 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
27350 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
27360 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
27370 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
27380 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
27390 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
273a0 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
273b0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
273c0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
273d0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
273e0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
273f0 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
27400 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
27410 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
27420 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
27430 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
27440 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
27450 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
27460 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
27470 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
27480 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
27490 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45  */.case OP_IdxLE
274a0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
274b0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
274c0 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xGT:          /*
274d0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
274e0 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20  _IdxLT:         
274f0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
27500 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20   OP_IdxGE:  {   
27510 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
27520 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
27530 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
27540 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
27550 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27560 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27570 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27580 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27590 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
275a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
275b0 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
275c0 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
275d0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29   pC->pCursor!=0)
275e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
275f0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27600 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27610 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
27620 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73  ->p5==1 );.  ass
27630 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
27640 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
27650 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
27660 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
27670 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
27680 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f  ->p4.i;.  if( pO
27690 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78  p->opcode<OP_Idx
276a0 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LT ){.    assert
276b0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
276c0 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxLE || pOp->
276d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
276e0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
276f0 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  t_rc = -1;.  }el
27700 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
27710 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27720 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
27730 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
27740 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
27750 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e  rc = 0;.  }.  r.
27760 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
27770 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
27780 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69  LITE_DEBUG.  { i
27790 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
277a0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
277b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
277c0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
277d0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73  ; }.#endif.  res
277e0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
277f0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
27800 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
27810 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
27820 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
27830 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43  eyCompare(db, pC
27840 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61  , &r, &res);.  a
27850 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45  ssert( (OP_IdxLE
27860 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
27870 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31  ) && (OP_IdxGE&1
27880 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20  )==(OP_IdxGT&1) 
27890 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  );.  if( (pOp->o
278a0 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64  pcode&1)==(OP_Id
278b0 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73  xLT&1) ){.    as
278c0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
278d0 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
278e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
278f0 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20  dxLT );.    res 
27900 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b  = -res;.  }else{
27910 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
27920 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
27930 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
27940 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
27950 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20     res++;.  }.  
27960 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
27970 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20  res>0,2);.  if( 
27980 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 70 63 20  res>0 ){.    pc 
27990 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a  = pOp->p2 - 1 ;.
279a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
279b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
279c0 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
279d0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
279e0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
279f0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
27a00 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
27a10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
27a20 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
27a30 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
27a40 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
27a50 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
27a60 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
27a70 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
27a80 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
27a90 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
27aa0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
27ab0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
27ac0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
27ad0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
27ae0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
27af0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
27b00 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
27b10 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
27b20 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
27b30 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
27b40 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
27b50 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
27b60 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
27b70 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
27b80 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
27b90 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
27ba0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
27bb0 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
27bc0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
27bd0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
27be0 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
27bf0 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
27c00 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
27c10 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
27c20 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
27c30 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
27c40 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
27c50 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
27c60 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
27c70 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
27c80 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
27c90 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
27ca0 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
27cb0 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
27cc0 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
27cd0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
27ce0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
27cf0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
27d00 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
27d10 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
27d20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
27d30 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
27d40 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
27d50 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
27d60 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
27d70 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
27d80 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56  .  int iCnt;.  V
27d90 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e  dbe *pVdbe;.  in
27da0 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74  t iDb;..  assert
27db0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
27dc0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
27dd0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27de0 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b  ABLE.  iCnt = 0;
27df0 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d  .  for(pVdbe=db-
27e00 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70  >pVdbe; pVdbe; p
27e10 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e  Vdbe = pVdbe->pN
27e20 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
27e30 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
27e40 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
27e50 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72 20 0a  dbe->bIsReader .
27e60 20 20 20 20 20 26 26 20 70 56 64 62 65 2d 3e 69       && pVdbe->i
27e70 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
27e80 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20   pVdbe->pc>=0 . 
27e90 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74     ){.      iCnt
27ea0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ++;.    }.  }.#e
27eb0 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d  lse.  iCnt = db-
27ec0 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65 6e 64  >nVdbeRead;.#end
27ed0 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  if.  pOut->flags
27ee0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
27ef0 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20  f( iCnt>1 ){.   
27f00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
27f10 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
27f20 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
27f30 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
27f40 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
27f50 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
27f60 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
27f70 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
27f80 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
27f90 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d   );.    iMoved =
27fa0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
27fb0 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c  ed.  Only to sil
27fc0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
27fd0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
27fe0 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
27ff0 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
28000 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
28010 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
28020 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
28030 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
28040 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
28050 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
28060 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
28070 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
28080 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
28090 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
280a0 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
280b0 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
280c0 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
280d0 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
280e0 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
280f0 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
28100 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
28110 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
28120 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
28130 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
28140 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
28150 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
28160 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
28170 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
28180 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28190 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
281a0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
281b0 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
281c0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
281d0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
281e0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
281f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
28200 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
28210 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
28220 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
28230 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
28240 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
28250 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
28260 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
28270 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
28280 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
28290 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
282a0 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
282b0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
282c0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
282d0 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
282e0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
282f0 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
28300 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
28310 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
28320 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
28330 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
28340 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
28350 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
28360 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
28370 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
28380 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
28390 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
283a0 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
283b0 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
283c0 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
283d0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
283e0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
283f0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
28400 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
28410 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
28420 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
28430 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
28440 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
28450 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
28460 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
28470 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
28480 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
28490 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
284a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
284b0 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
284c0 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
284d0 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
284e0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
284f0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
28500 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
28510 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
28520 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
28530 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  >p2) );.  rc = s
28540 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
28550 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d  Table(.      db-
28560 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42  >aDb[pOp->p2].pB
28570 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70  t, pOp->p1, (pOp
28580 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20  ->p3 ? &nChange 
28590 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20  : 0).  );.  if( 
285a0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70  pOp->p3 ){.    p
285b0 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68  ->nChange += nCh
285c0 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  ange;.    if( pO
285d0 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20  p->p3>0 ){.     
285e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
285f0 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
28600 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  3]) );.      mem
28610 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
28620 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
28630 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70  ;.      aMem[pOp
28640 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
28650 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
28660 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28670 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74  pcode: ResetSort
28680 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  er P1 * * * *.**
28690 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
286a0 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65  ontents from the
286b0 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
286c0 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68   or sorter.** th
286d0 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75  at is open on cu
286e0 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P1..**.** T
286f0 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20  his opcode only 
28700 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72  works for cursor
28710 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69  s used for sorti
28720 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64  ng and.** opened
28730 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68   with OP_OpenEph
28740 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72  emeral or OP_Sor
28750 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65  terOpen..*/.case
28760 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a   OP_ResetSorter:
28770 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
28780 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28  *pC;. .  assert(
28790 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
287a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
287b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
287c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
287d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
287e0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 53 6f 72  ;.  if( pC->pSor
287f0 74 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ter ){.    sqlit
28800 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65  e3VdbeSorterRese
28810 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65  t(db, pC->pSorte
28820 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
28830 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45   assert( pC->isE
28840 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20  phemeral );.    
28850 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28860 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72  eClearTableOfCur
28870 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
28880 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28890 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
288a0 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
288b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
288c0 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
288d0 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
288e0 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
288f0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
28900 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
28910 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
28920 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
28930 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
28940 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
28950 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
28960 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
28970 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
28980 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
28990 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
289a0 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
289b0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
289c0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
289d0 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
289e0 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
289f0 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
28a00 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
28a10 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
28a20 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
28a30 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
28a40 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
28a50 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
28a60 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
28a70 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
28a80 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
28a90 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
28aa0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
28ab0 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
28ac0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
28ad0 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
28ae0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
28af0 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
28b00 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
28b10 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
28b20 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
28b30 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
28b40 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
28b50 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
28b60 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
28b70 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
28b80 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
28b90 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
28ba0 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
28bb0 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
28bc0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
28bd0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
28be0 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
28bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
28c00 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63  -prerelease */.c
28c10 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ase OP_CreateTab
28c20 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  le: {          /
28c30 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
28c40 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  e */.  int pgno;
28c50 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
28c60 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f  Db *pDb;..  pgno
28c70 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
28c80 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
28c90 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
28ca0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
28cb0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
28cc0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
28cd0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
28ce0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
28cf0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
28d00 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
28d10 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
28d20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
28d30 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
28d40 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
28d50 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
28d60 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
28d70 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
28d80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
28d90 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
28da0 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
28db0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
28dc0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
28dd0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
28de0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
28df0 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
28e00 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
28e10 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
28e20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
28e30 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
28e40 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
28e50 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
28e60 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
28e70 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
28e80 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
28e90 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  . .**.** This op
28ea0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
28eb0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
28ec0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
28ed0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
28ee0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
28ef0 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
28f00 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
28f10 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
28f20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
28f30 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
28f40 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
28f50 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
28f60 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
28f70 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
28f80 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
28f90 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
28fa0 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
28fb0 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
28fc0 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
28fd0 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
28fe0 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
28ff0 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
29000 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
29010 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
29020 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
29030 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
29040 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
29050 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
29060 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
29070 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
29080 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
29090 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
290a0 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
290b0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
290c0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
290d0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
290e0 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
290f0 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
29100 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
29110 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20    /* Used to be 
29120 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f  a conditional */
29130 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
29140 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44   SCHEMA_TABLE(iD
29150 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  b);.    initData
29160 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
29170 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
29180 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
29190 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
291a0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
291b0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
291c0 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
291d0 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
291e0 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
291f0 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
29200 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
29210 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
29220 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d  b[iDb].zName, zM
29230 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
29240 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
29250 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
29260 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
29270 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
29280 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
29290 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
292a0 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
292b0 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
292c0 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
292d0 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
292e0 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
292f0 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
29300 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
29310 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
29320 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
29330 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
29340 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
29350 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
29360 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
29370 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
29380 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
29390 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
293a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
293b0 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73   rc ) sqlite3Res
293c0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
293d0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
293e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
293f0 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
29400 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
29410 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
29420 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
29430 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
29440 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
29450 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
29460 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
29470 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
29480 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
29490 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
294a0 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
294b0 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
294c0 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
294d0 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
294e0 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
294f0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
29500 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
29510 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
29520 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
29530 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
29540 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
29550 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
29560 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
29570 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
29580 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
29590 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
295a0 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
295b0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
295c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
295d0 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
295e0 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
295f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
29600 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
29610 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
29620 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
29630 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
29640 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
29650 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
29660 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
29670 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
29680 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
29690 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
296a0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
296b0 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
296c0 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
296d0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
296e0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
296f0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
29700 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
29710 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
29720 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
29730 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
29740 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
29750 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
29760 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
29770 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
29780 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
29790 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
297a0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
297b0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
297c0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
297d0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
297e0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
297f0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
29800 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
29810 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
29820 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
29830 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
29840 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a  stroy opcode).**
29850 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
29860 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
29870 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
29880 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
29890 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
298a0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
298b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
298c0 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
298d0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
298e0 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
298f0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
29900 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29910 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
29920 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
29930 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
29940 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
29950 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
29960 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
29970 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
29980 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
29990 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
299a0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
299b0 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
299c0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
299d0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
299e0 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
299f0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
29a00 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
29a10 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
29a20 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
29a30 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
29a40 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
29a50 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
29a60 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
29a70 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
29a80 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
29a90 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
29aa0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
29ab0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29ac0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
29ad0 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
29ae0 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
29af0 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
29b00 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
29b10 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
29b20 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
29b30 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
29b40 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
29b50 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
29b60 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
29b70 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
29b80 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
29b90 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
29ba0 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
29bb0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
29bc0 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
29bd0 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
29be0 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
29bf0 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
29c00 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
29c10 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
29c20 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
29c30 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
29c40 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
29c50 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
29c60 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
29c70 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
29c80 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
29c90 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
29ca0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
29cb0 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
29cc0 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
29cd0 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
29ce0 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
29cf0 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
29d00 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
29d10 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
29d20 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
29d30 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
29d40 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
29d50 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
29d60 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
29d70 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
29d80 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
29d90 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
29da0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
29db0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
29dc0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
29dd0 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
29de0 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
29df0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
29e00 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
29e10 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
29e20 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
29e30 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
29e40 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
29e50 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
29e60 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
29e70 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
29e80 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
29e90 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
29ea0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
29eb0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
29ec0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
29ed0 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
29ee0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
29ef0 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
29f00 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
29f10 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
29f20 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
29f30 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
29f40 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
29f50 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
29f60 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20   remaining */.. 
29f70 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
29f80 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74  eader );.  nRoot
29f90 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
29fa0 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
29fb0 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
29fc0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
29fd0 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
29fe0 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
29ff0 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
2a000 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
2a010 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2a020 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2a030 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2a040 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
2a050 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2a060 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2a070 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2a080 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2a090 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
2a0a0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
2a0b0 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
2a0c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2a0d0 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
2a0e0 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
2a0f0 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
2a100 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
2a110 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
2a120 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
2a130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2a140 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
2a150 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2a160 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2a170 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20  , pOp->p5) );.  
2a180 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
2a190 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
2a1a0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
2a1b0 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
2a1c0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
2a1f0 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
2a200 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2a210 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
2a220 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
2a230 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2a240 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2a250 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
2a260 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
2a270 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
2a280 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
2a290 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
2a2a0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2a2b0 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
2a2c0 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
2a2d0 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
2a2e0 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
2a2f0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
2a300 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
2a310 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2a320 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
2a330 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2a340 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2a350 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2a360 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
2a370 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
2a380 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2a390 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d  is:  rowset(P1)=
2a3a0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2a3b0 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2a3c0 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2a3d0 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2a3e0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
2a3f0 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2a400 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2a410 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2a420 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2a430 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2a440 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2a450 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2a460 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2a470 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2a480 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2a490 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2a4a0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2a4b0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2a4c0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2a4d0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2a4e0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2a4f0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2a500 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2a510 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2a520 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2a530 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2a540 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2a550 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2a560 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2a570 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2a580 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2a590 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2a5a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2a5b0 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50    r[P3]=rowset(P
2a5c0 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74  1).**.** Extract
2a5d0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
2a5e0 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
2a5f0 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
2a600 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
2a610 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
2a620 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
2a630 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
2a640 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
2a650 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
2a660 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
2a670 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2a680 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2a690 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
2a6a0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
2a6b0 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
2a6c0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2a6d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
2a6e0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2a6f0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
2a700 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
2a710 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
2a720 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
2a730 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
2a740 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
2a750 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
2a760 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2a770 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
2a780 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2a790 31 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  1;.    VdbeBranc
2a7a0 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d  hTaken(1,2);.  }
2a7b0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
2a7c0 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
2a7d0 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
2a7e0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
2a7f0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
2a800 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
2a810 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2a820 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d  hTaken(0,2);.  }
2a830 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
2a840 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
2a850 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2a860 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
2a870 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
2a880 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65  f r[P3] in rowse
2a890 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  t(P1) goto P2.**
2a8a0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
2a8b0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f  is assumed to ho
2a8c0 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ld a 64-bit inte
2a8d0 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65  ger value. If re
2a8e0 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e  gister P1.** con
2a8f0 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f  tains a RowSet o
2a900 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52  bject and that R
2a910 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e  owSet object con
2a920 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c  tains.** the val
2a930 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a  ue held in P3, j
2a940 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20  ump to register 
2a950 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  P2. Otherwise, i
2a960 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74  nsert the.** int
2a970 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20  eger in P3 into 
2a980 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63  the RowSet and c
2a990 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68  ontinue on to th
2a9a0 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65  e.** next opcode
2a9b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53  ..**.** The RowS
2a9c0 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74  et object is opt
2a9d0 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  imized for the c
2a9e0 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73  ase where succes
2a9f0 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20  sive sets.** of 
2aa00 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20  integers, where 
2aa10 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
2aa20 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
2aa30 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20   Each set.** of 
2aa40 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69  values is identi
2aa50 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
2aa60 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
2aa70 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
2aa80 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
2aa90 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31   final set P4=-1
2aaa0 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69  .  P4 must be ei
2aab0 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f  ther -1 or.** no
2aac0 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72  n-negative.  For
2aad0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2aae0 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20  lues of P4 only 
2aaf0 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62  the lower 4.** b
2ab00 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
2ab10 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ant..**.** This 
2ab20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
2ab30 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
2ab40 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
2ab50 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
2ab60 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65   the rowset obje
2ab70 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
2ab80 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
2ab90 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
2aba0 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
2abb0 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
2abc0 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
2abd0 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
2abe0 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
2abf0 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
2ac00 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
2ac10 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
2ac20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
2ac30 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
2ac40 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
2ac50 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
2ac60 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
2ac70 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
2ac80 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2ac90 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
2aca0 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
2acb0 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
2acc0 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
2acd0 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
2ace0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
2acf0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
2ad00 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2ad10 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
2ad20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
2ad30 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
2ad40 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2ad50 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
2ad60 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
2ad70 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
2ad80 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
2ad90 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2ada0 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
2adb0 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
2adc0 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
2add0 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
2ade0 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
2adf0 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
2ae00 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
2ae10 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
2ae20 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
2ae30 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2ae40 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2ae50 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ae60 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2ae70 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2ae80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2ae90 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2aea0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
2aeb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2aec0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
2aed0 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
2aee0 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
2aef0 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
2af00 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
2af10 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
2af20 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53  1->u.pRowSet, iS
2af30 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2af40 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2af50 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
2af60 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
2af70 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2af80 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2af90 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
2afa0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
2afb0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2afc0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2afd0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2afe0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
2aff0 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2b000 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2b010 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
2b020 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
2b030 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
2b040 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
2b050 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
2b060 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
2b070 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
2b080 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
2b090 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
2b0a0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2b0b0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2b0c0 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
2b0d0 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
2b0e0 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
2b0f0 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
2b100 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
2b110 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
2b120 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2b130 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
2b140 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
2b150 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
2b160 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
2b170 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
2b180 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
2b190 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2b1a0 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
2b1b0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2b1c0 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
2b1d0 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
2b1e0 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
2b1f0 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
2b200 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
2b210 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
2b220 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
2b230 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2b240 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
2b250 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2b260 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
2b270 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2b280 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
2b290 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
2b2a0 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
2b2b0 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
2b2c0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2b2d0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b2f0 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
2b300 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
2b310 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2b320 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
2b330 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
2b340 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
2b350 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
2b360 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2b370 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
2b380 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
2b390 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
2b3a0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
2b3b0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2b3c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2b3d0 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
2b3e0 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
2b3f0 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
2b400 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2b410 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
2b420 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
2b430 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2b440 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
2b450 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
2b460 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
2b470 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
2b480 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
2b490 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
2b4a0 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
2b4b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2b4c0 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
2b4d0 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
2b4e0 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
2b4f0 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
2b500 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
2b510 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2b520 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
2b530 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
2b540 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
2b550 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
2b560 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2b570 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
2b580 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
2b590 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
2b5a0 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
2b5b0 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
2b5c0 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
2b5d0 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
2b5e0 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
2b5f0 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
2b600 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
2b610 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
2b620 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
2b630 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
2b640 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
2b650 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
2b660 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
2b670 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
2b680 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
2b690 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
2b6a0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2b6b0 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
2b6c0 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
2b6d0 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
2b6e0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
2b6f0 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
2b700 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
2b710 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
2b720 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
2b730 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
2b740 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
2b750 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
2b760 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
2b770 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2b780 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
2b790 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
2b7a0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
2b7b0 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
2b7c0 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
2b7d0 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
2b7e0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
2b7f0 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
2b800 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
2b810 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2b820 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
2b830 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
2b840 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2b850 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
2b860 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
2b870 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
2b880 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
2b890 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
2b8a0 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
2b8b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2b8c0 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  R;.    sqlite3Se
2b8d0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2b8e0 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61  Msg, db, "too ma
2b8f0 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69  ny levels of tri
2b900 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29  gger recursion")
2b910 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2b920 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
2b930 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  pRt is used to s
2b940 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  tore the memory 
2b950 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65  required to save
2b960 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20   the state.  ** 
2b970 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
2b980 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20  rogram, and the 
2b990 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2b9a0 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78  at runtime to ex
2b9b0 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74  ecute.  ** the t
2b9c0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
2b9d0 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20  If this trigger 
2b9e0 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62  has been fired b
2b9f0 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20  efore, then pRt 
2ba00 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79  .  ** is already
2ba10 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65   allocated. Othe
2ba20 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62  rwise, it must b
2ba30 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  e initialized.  
2ba40 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66  */.  if( (pRt->f
2ba50 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d  lags&MEM_Frame)=
2ba60 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
2ba70 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
2ba80 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
2ba90 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
2baa0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
2bab0 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
2bac0 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
2bad0 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
2bae0 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
2baf0 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
2bb00 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
2bb10 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
2bb20 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
2bb30 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
2bb40 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
2bb50 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
2bb60 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
2bb70 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
2bb80 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
2bb90 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
2bba0 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
2bbb0 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  sr;.    nByte = 
2bbc0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
2bbd0 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
2bbe0 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
2bbf0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
2bc00 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2bc10 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
2bc20 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20  zeof(VdbeCursor 
2bc30 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *).             
2bc40 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   + pProgram->nOn
2bc50 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b  ce * sizeof(u8);
2bc60 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
2bc70 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
2bc80 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
2bc90 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
2bca0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2bcb0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
2bcc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2bcd0 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
2bce0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
2bcf0 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
2bd00 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
2bd10 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
2bd20 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
2bd30 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
2bd40 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2bd50 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
2bd60 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
2bd70 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b  pFrame->pc = pc;
2bd80 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2bd90 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2bda0 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2bdb0 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2bdc0 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2bdd0 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2bde0 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2bdf0 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2be00 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2be10 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2be20 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2be30 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2be40 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2be50 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2be60 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2be70 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2be80 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2be90 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20  p->nOnceFlag;.. 
2bea0 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
2beb0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2bec0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2bed0 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
2bee0 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
2bef0 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
2bf00 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
2bf10 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
2bf20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
2bf30 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
2bf40 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
2bf50 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
2bf60 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
2bf70 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2bf80 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
2bf90 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2bfa0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20  ->nChildMem );. 
2bfb0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2bfc0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2bfd0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
2bfe0 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d      assert( pc==
2bff0 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
2c000 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
2c010 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
2c020 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
2c030 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
2c040 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
2c050 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61  ;.  pFrame->nCha
2c060 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65  nge = p->nChange
2c070 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43  ;.  pFrame->nDbC
2c080 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e  hange = p->db->n
2c090 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68  Change;.  p->nCh
2c0a0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70  ange = 0;.  p->p
2c0b0 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2c0c0 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d    p->aMem = aMem
2c0d0 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
2c0e0 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20  (pFrame)[-1];.  
2c0f0 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65  p->nMem = pFrame
2c100 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70  ->nChildMem;.  p
2c110 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36  ->nCursor = (u16
2c120 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  )pFrame->nChildC
2c130 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d  sr;.  p->apCsr =
2c140 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29   (VdbeCursor **)
2c150 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d  &aMem[p->nMem+1]
2c160 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70  ;.  p->aOp = aOp
2c170 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70   = pProgram->aOp
2c180 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72  ;.  p->nOp = pPr
2c190 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d  ogram->nOp;.  p-
2c1a0 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38  >aOnceFlag = (u8
2c1b0 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e   *)&p->apCsr[p->
2c1c0 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e  nCursor];.  p->n
2c1d0 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67  OnceFlag = pProg
2c1e0 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63  ram->nOnce;.  pc
2c1f0 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28   = -1;.  memset(
2c200 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c  p->aOnceFlag, 0,
2c210 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a   p->nOnceFlag);.
2c220 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2c230 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
2c240 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2c250 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
2c260 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
2c270 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
2c280 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
2c290 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
2c2a0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
2c2b0 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
2c2c0 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
2c2d0 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
2c2e0 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
2c2f0 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
2c300 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
2c310 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
2c320 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
2c330 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
2c340 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2c350 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
2c360 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
2c370 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
2c380 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
2c390 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
2c3a0 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
2c3b0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
2c3c0 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
2c3d0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2c3e0 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
2c3f0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2c400 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
2c410 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
2c420 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
2c430 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
2c440 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2c450 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2c460 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2c470 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
2c480 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  pIn;.  pFrame = 
2c490 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
2c4a0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2c4b0 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
2c4c0 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
2c4d0 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
2c4e0 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
2c4f0 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
2c500 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
2c510 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
2c520 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2c530 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
2c540 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2c550 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2c560 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
2c570 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
2c580 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2c590 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a  : fkctr[P1]+=P2.
2c5a0 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20  **.** Increment 
2c5b0 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  a "constraint co
2c5c0 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32  unter" by P2 (P2
2c5d0 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65   may be negative
2c5e0 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a   or positive)..*
2c5f0 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2c600 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73  ero, the databas
2c610 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75  e constraint cou
2c620 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2c630 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65  ted .** (deferre
2c640 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
2c650 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65  nstraints). Othe
2c660 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20  rwise, if P1 is 
2c670 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74  zero, the .** st
2c680 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20  atement counter 
2c690 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
2c6a0 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2c6b0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2c6c0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2c6d0 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66  kCounter: {.  if
2c6e0 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
2c6f0 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b  LITE_DeferFKs ){
2c700 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2c710 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70  edImmCons += pOp
2c720 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ->p2;.  }else if
2c730 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2c740 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
2c750 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2c760 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e   }else{.    p->n
2c770 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20  FkConstraint += 
2c780 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62  pOp->p2;.  }.  b
2c790 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2c7a0 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20  de: FkIfZero P1 
2c7b0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2c7c0 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50  psis: if fkctr[P
2c7d0 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
2c7e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2c7f0 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
2c800 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2c810 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
2c820 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
2c830 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
2c840 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
2c850 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2c860 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2c870 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
2c880 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
2c890 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2c8a0 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
2c8b0 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
2c8c0 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
2c8d0 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
2c8e0 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
2c8f0 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
2c900 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2c910 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
2c920 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
2c930 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2c940 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
2c950 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2c960 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
2c970 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2c980 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
2c990 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
2c9a0 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
2c9b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2c9c0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2c9d0 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  1 ){.    VdbeBra
2c9e0 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65  nchTaken(db->nDe
2c9f0 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
2ca00 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2ca10 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
2ca20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72    if( db->nDefer
2ca30 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
2ca40 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2ca50 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70  ns==0 ) pc = pOp
2ca60 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  ->p2-1;.  }else{
2ca70 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2ca80 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74  aken(p->nFkConst
2ca90 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
2caa0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2cab0 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
2cac0 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
2cad0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
2cae0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
2caf0 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
2cb00 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2cb10 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
2cb20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2cb30 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23  OREIGN_KEY */..#
2cb40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cb50 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2cb60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d  ./* Opcode: MemM
2cb70 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ax P1 P2 * * *.*
2cb80 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
2cb90 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32  ]=max(r[P1],r[P2
2cba0 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  ]).**.** P1 is a
2cbb0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
2cbc0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
2cbd0 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74  his VM (the root
2cbe0 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66   frame is.** dif
2cbf0 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
2cc00 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66  current frame if
2cc10 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2cc20 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  n is being execu
2cc30 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ted.** within a 
2cc40 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65  sub-program). Se
2cc50 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
2cc60 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
2cc70 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a  e maximum of .**
2cc80 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c   its current val
2cc90 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ue and the value
2cca0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2ccb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
2ccc0 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61  ruction throws a
2ccd0 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d  n error if the m
2cce0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f  emory cell is no
2ccf0 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61  t initially.** a
2cd00 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
2cd10 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20  se OP_MemMax: { 
2cd20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
2cd30 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2cd40 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
2cd50 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
2cd60 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2cd70 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
2cd80 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
2cd90 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
2cda0 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
2cdb0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
2cdc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
2cdd0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2cde0 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
2cdf0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
2ce00 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
2ce10 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
2ce20 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
2ce30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2ce40 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2ce50 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
2ce60 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2ce70 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
2ce80 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
2ce90 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
2cea0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2ceb0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
2cec0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
2ced0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
2cee0 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
2cef0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
2cf00 50 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  P1]>0 goto P2.**
2cf10 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2cf20 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2cf30 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
2cf40 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
2cf50 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
2cf60 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
2cf70 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
2cf80 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
2cf90 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
2cfa0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
2cfb0 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
2cfc0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
2cfd0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
2cfe0 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
2cff0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2d000 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2d010 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2d020 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2d030 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2d040 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
2d050 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
2d060 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2d070 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  >0 ){.     pc = 
2d080 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2d090 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d0a0 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31  Opcode: IfNeg P1
2d0b0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2d0c0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50  nopsis: r[P1]+=P
2d0d0 33 2c 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f  3, if r[P1]<0 go
2d0e0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
2d0f0 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2d100 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2d110 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33    Add literal P3
2d120 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
2d130 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
2d140 74 68 65 6e 20 69 66 20 74 68 65 20 76 61 6c 75  then if the valu
2d150 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2d160 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65   is less than ze
2d170 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  ro, jump to P2. 
2d180 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65  .*/.case OP_IfNe
2d190 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  g: {        /* j
2d1a0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2d1b0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2d1c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2d1d0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2d1e0 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
2d1f0 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i += pOp->p3;.  
2d200 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2d210 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b  pIn1->u.i<0, 2);
2d220 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2d230 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
2d240 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2d250 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d260 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
2d270 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2d280 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d  ynopsis: r[P1]+=
2d290 50 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20  P3, if r[P1]==0 
2d2a0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2d2b0 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2d2c0 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2d2d0 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2d2e0 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
2d2f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2d300 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
2d310 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
2d320 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
2d330 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65  .*/.case OP_IfZe
2d340 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
2d350 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2d360 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2d370 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2d380 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2d390 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  Int );.  pIn1->u
2d3a0 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i += pOp->p3;. 
2d3b0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2d3c0 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32  (pIn1->u.i==0, 2
2d3d0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2d3e0 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63  .i==0 ){.     pc
2d3f0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2d400 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d410 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
2d420 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
2d430 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
2d440 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
2d450 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
2d460 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
2d470 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2d480 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
2d490 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
2d4a0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
2d4b0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2d4c0 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a  to the FuncDef.*
2d4d0 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  * structure that
2d4e0 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
2d4f0 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65  unction.  Use re
2d500 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20  gister.** P3 as 
2d510 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  the accumulator.
2d520 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
2d530 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
2d540 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
2d550 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
2d560 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73  ccessors..*/.cas
2d570 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a  e OP_AggStep: {.
2d580 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
2d590 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  ;.  Mem *pMem;. 
2d5a0 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 4d 65   Mem *pRec;.  Me
2d5b0 6d 20 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  m t;.  sqlite3_c
2d5c0 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
2d5d0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
2d5e0 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  Val;..  n = pOp-
2d5f0 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p5;.  assert( n
2d600 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20  >=0 );.  pRec = 
2d610 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2d620 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
2d630 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
2d640 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20  Val || n==0 );. 
2d650 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
2d660 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  ++, pRec++){.   
2d670 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2d680 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
2d690 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63   apVal[i] = pRec
2d6a0 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
2d6b0 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b  Change(p, pRec);
2d6c0 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63  .  }.  ctx.pFunc
2d6d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
2d6e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2d6f0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2d700 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
2d710 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e  ursor) );.  ctx.
2d720 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61  pMem = pMem = &a
2d730 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2d740 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c  pMem->n++;.  sql
2d750 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28  ite3VdbeMemInit(
2d760 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  &t, db, MEM_Null
2d770 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20  );.  ctx.pOut = 
2d780 26 74 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f  &t;.  ctx.isErro
2d790 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 56 64  r = 0;.  ctx.pVd
2d7a0 62 65 20 3d 20 70 3b 0a 20 20 63 74 78 2e 69 4f  be = p;.  ctx.iO
2d7b0 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e 73 6b  p = pc;.  ctx.sk
2d7c0 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 63  ipFlag = 0;.  (c
2d7d0 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
2d7e0 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
2d7f0 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
2d800 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
2d810 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
2d820 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2d830 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2d840 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2d850 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
2d860 74 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  t));.    rc = ct
2d870 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  x.isError;.  }. 
2d880 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61   if( ctx.skipFla
2d890 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
2d8a0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
2d8b0 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
2d8c0 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
2d8d0 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
2d8e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2d8f0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
2d900 31 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  1);.  }.  sqlite
2d910 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
2d920 26 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  &t);.  break;.}.
2d930 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
2d940 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
2d950 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
2d960 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a  ccum=r[P1] N=P2.
2d970 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2d980 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63  e finalizer func
2d990 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2d9a0 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a  egate.  P1 is.**
2d9b0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
2d9c0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  tion that is the
2d9d0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72   accumulator for
2d9e0 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a   the aggregate..
2d9f0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
2da00 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
2da10 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
2da20 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
2da30 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
2da40 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2da50 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
2da60 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
2da70 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
2da80 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
2da90 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
2daa0 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
2dab0 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
2dac0 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
2dad0 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
2dae0 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
2daf0 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
2db00 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
2db10 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
2db20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20  degenerate case 
2db30 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
2db40 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
2db50 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
2db60 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lled..*/.case OP
2db70 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
2db80 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
2db90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
2dba0 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
2dbb0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2dbc0 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
2dbd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2dbe0 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
2dbf0 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
2dc00 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
2dc10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2dc20 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
2dc30 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
2dc40 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
2dc50 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2dc60 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2dc70 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2dc80 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d  e3_value_text(pM
2dc90 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  em));.  }.  sqli
2dca0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2dcb0 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
2dcc0 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
2dcd0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
2dce0 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
2dcf0 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2dd00 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
2dd10 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
2dd20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
2dd30 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2dd40 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65  L./* Opcode: Che
2dd50 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33  ckpoint P1 P2 P3
2dd60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
2dd70 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50  point database P
2dd80 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  1. This is a no-
2dd90 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20  op if P1 is not 
2dda0 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20  currently in.** 
2ddb0 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65  WAL mode. Parame
2ddc0 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66  ter P2 is one of
2ddd0 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
2dde0 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c  NT_PASSIVE, FULL
2ddf0 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20  .** or RESTART. 
2de00 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
2de10 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
2de20 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
2de30 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
2de40 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
2de50 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
2de60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2de70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
2de80 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
2de90 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
2dea0 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
2deb0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
2dec0 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
2ded0 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
2dee0 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
2def0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
2df00 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
2df10 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
2df20 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
2df30 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
2df40 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
2df50 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
2df60 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
2df70 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
2df80 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
2df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2dfa0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2dfb0 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
2dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfd0 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
2dfe0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
2e010 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
2e020 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2e030 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
2e040 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
2e050 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
2e060 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2e070 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2e080 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
2e090 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2e0a0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2e0b0 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
2e0c0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
2e0d0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
2e0e0 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20  START.  );.  rc 
2e0f0 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  = sqlite3Checkpo
2e100 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  int(db, pOp->p1,
2e110 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b   pOp->p2, &aRes[
2e120 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20  1], &aRes[2]);. 
2e130 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2e140 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d  BUSY ){.    rc =
2e150 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
2e160 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d  aRes[0] = 1;.  }
2e170 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d  .  for(i=0, pMem
2e180 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2e190 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65  ]; i<3; i++, pMe
2e1a0 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  m++){.    sqlite
2e1b0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2e1c0 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73  (pMem, (i64)aRes
2e1d0 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20  [i]);.  }    .  
2e1e0 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64  break;.};  .#end
2e1f0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2e200 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f  TE_OMIT_PRAGMA./
2e210 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61  * Opcode: Journa
2e220 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a  lMode P1 P2 P3 *
2e230 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20   *.**.** Change 
2e240 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  the journal mode
2e250 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20   of database P1 
2e260 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62  to P3. P3 must b
2e270 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20  e one of the.** 
2e280 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2e290 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66  E_XXX values. If
2e2a0 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65   changing betwee
2e2b0 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f  n the various ro
2e2c0 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20  llback.** modes 
2e2d0 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74  (delete, truncat
2e2e0 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20  e, persist, off 
2e2f0 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69  and memory), thi
2e300 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a  s is a simple.**
2e310 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49   operation. No I
2e320 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  O is required..*
2e330 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67  *.** If changing
2e340 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20   into or out of 
2e350 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f  WAL mode the pro
2e360 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63  cedure is more c
2e370 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a  omplicated..**.*
2e380 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67  * Write a string
2e390 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
2e3a0 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  final journal-mo
2e3b0 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  de to register P
2e3c0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f  2..*/.case OP_Jo
2e3d0 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20  urnalMode: {    
2e3e0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2e3f0 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
2e400 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
2e410 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
2e420 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
2e430 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
2e440 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e460 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
2e470 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
2e480 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
2e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4a0 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
2e4b0 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
2e4c0 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
2e4d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2e4e0 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
2e4f0 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
2e500 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2e510 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
2e520 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
2e530 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
2e540 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
2e550 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
2e560 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
2e570 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
2e580 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2e590 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
2e5a0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2e5b0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
2e5c0 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
2e5d0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2e5e0 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
2e5f0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2e600 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2e610 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
2e620 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2e630 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
2e640 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2e650 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2e660 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
2e670 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2e680 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
2e690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e6a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2e6b0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2e6c0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2e6d0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42  Only==0 );..  pB
2e6e0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2e6f0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
2e700 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
2e710 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
2e720 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
2e730 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
2e740 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
2e750 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2e760 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
2e770 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
2e780 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
2e790 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
2e7a0 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
2e7b0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
2e7c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e7d0 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
2e7e0 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
2e7f0 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c  Filename(pPager,
2e800 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f   1);..  /* Do no
2e810 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
2e820 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
2e830 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
2e840 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
2e850 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
2e860 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
2e870 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
2e880 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
2e890 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
2e8a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2e8b0 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71  DE_WAL.   && (sq
2e8c0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
2e8d0 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20  ilename)==0     
2e8e0 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
2e8f0 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
2e900 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
2e910 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
2e920 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
2e930 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
2e940 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
2e950 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
2e960 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
2e970 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
2e980 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e990 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
2e9a0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e9b0 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
2e9c0 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
2e9d0 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  t || db->nVdbeRe
2e9e0 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63  ad>1 ){.      rc
2e9f0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2ea00 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
2ea10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2ea20 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20  Msg, db, .      
2ea30 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e      "cannot chan
2ea40 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66  ge %s wal mode f
2ea50 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61  rom within a tra
2ea60 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20  nsaction",.     
2ea70 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45       (eNew==PAGE
2ea80 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2ea90 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75  L ? "into" : "ou
2eaa0 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a  t of").      );.
2eab0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2eac0 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20   }else{. .      
2ead0 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2eae0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2eaf0 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
2eb00 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64   leaving WAL mod
2eb10 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67  e, close the log
2eb20 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73   file. If succes
2eb30 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20  sful, the call. 
2eb40 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67         ** to Pag
2eb50 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65  erCloseWal() che
2eb60 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c  ckpoints and del
2eb70 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61  etes the write-a
2eb80 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20  head-log .      
2eb90 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58    ** file. An EX
2eba0 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79  CLUSIVE lock may
2ebb0 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f   still be held o
2ebc0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2ebd0 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  ile .        ** 
2ebe0 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66  after a successf
2ebf0 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20  ul return. .    
2ec00 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72      */.        r
2ec10 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
2ec20 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29  CloseWal(pPager)
2ec30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
2ec40 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2ec50 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
2ec60 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2ec70 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2ec80 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
2ec90 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c     }else if( eOl
2eca0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2ecb0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20  MODE_MEMORY ){. 
2ecc0 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74         /* Cannot
2ecd0 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65   transition dire
2ece0 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59  ctly from MEMORY
2ecf0 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f   to WAL.  Use mo
2ed00 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a  de OFF.        *
2ed10 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64  * as an intermed
2ed20 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  iate */.        
2ed30 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2ed40 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2ed50 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  r, PAGER_JOURNAL
2ed60 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20  MODE_OFF);.     
2ed70 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f   }.  .      /* O
2ed80 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  pen a transactio
2ed90 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
2eda0 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65  e file. Regardle
2edb0 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  ss of the journa
2edc0 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c  l.      ** mode,
2edd0 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
2ede0 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20  n always uses a 
2edf0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
2ee00 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
2ee10 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2ee20 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
2ee30 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  Bt)==0 );.      
2ee40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2ee50 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
2ee60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
2ee70 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65  tVersion(pBt, (e
2ee80 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2ee90 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a  ALMODE_WAL ? 2 :
2eea0 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   1));.      }.  
2eeb0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
2eec0 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
2eed0 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69  OMIT_WAL */..  i
2eee0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65  f( rc ){.    eNe
2eef0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20  w = eOld;.  }.  
2ef00 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61  eNew = sqlite3Pa
2ef10 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2ef20 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
2ef30 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
2ef40 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
2ef50 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
2ef60 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
2ef70 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
2ef80 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69  z = (char *)sqli
2ef90 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
2efa0 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74  me(eNew);.  pOut
2efb0 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ->n = sqlite3Str
2efc0 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a  len30(pOut->z);.
2efd0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
2efe0 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c  LITE_UTF8;.  sql
2eff0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2f000 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
2f010 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
2f020 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
2f030 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2f040 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   */..#if !define
2f050 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41  d(SQLITE_OMIT_VA
2f060 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65  CUUM) && !define
2f070 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54  d(SQLITE_OMIT_AT
2f080 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TACH)./* Opcode:
2f090 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20   Vacuum * * * * 
2f0a0 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74  *.**.** Vacuum t
2f0b0 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
2f0c0 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  se.  This opcode
2f0d0 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65   will cause othe
2f0e0 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63  r virtual.** mac
2f0f0 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61  hines to be crea
2f100 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74  ted and run.  It
2f110 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c   may not be call
2f120 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a  ed from within.*
2f130 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  * a transaction.
2f140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75  .*/.case OP_Vacu
2f150 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  um: {.  assert( 
2f160 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2f170 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2f180 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
2f190 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72  rrMsg, db);.  br
2f1a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
2f1b0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2f1c0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2f1d0 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
2f1e0 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
2f1f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
2f200 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
2f210 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
2f220 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
2f230 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
2f240 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
2f250 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
2f260 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
2f270 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
2f280 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
2f290 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2f2a0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
2f2b0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2f2c0 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
2f2d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2f2e0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
2f2f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2f300 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2f310 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2f320 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2f330 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2f340 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
2f350 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2f360 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
2f370 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2f380 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
2f390 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
2f3a0 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
2f3b0 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
2f3c0 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
2f3d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
2f3e0 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
2f3f0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2f400 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2f410 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2f420 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
2f430 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
2f440 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
2f450 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
2f460 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65  ements to expire
2f470 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72  .  When an expir
2f480 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2f490 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e  is executed usin
2f4a0 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  g sqlite3_step()
2f4b0 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20   it will either 
2f4c0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a  automatically.**
2f4d0 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c   reprepare itsel
2f4e0 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69  f (if it was ori
2f4f0 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20  ginally created 
2f500 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  using sqlite3_pr
2f510 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f  epare_v2()).** o
2f520 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77  r it will fail w
2f530 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  ith SQLITE_SCHEM
2f540 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20  A..** .** If P1 
2f550 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53  is 0, then all S
2f560 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65  QL statements be
2f570 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66  come expired. If
2f580 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2f590 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  .** then only th
2f5a0 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  e currently exec
2f5b0 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uting statement 
2f5c0 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63  is expired..*/.c
2f5d0 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b  ase OP_Expire: {
2f5e0 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20  .  if( !pOp->p1 
2f5f0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  ){.    sqlite3Ex
2f600 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
2f610 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65  ements(db);.  }e
2f620 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69  lse{.    p->expi
2f630 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  red = 1;.  }.  b
2f640 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
2f650 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2f660 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63  RED_CACHE./* Opc
2f670 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50  ode: TableLock P
2f680 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
2f690 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31  Synopsis: iDb=P1
2f6a0 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50   root=P2 write=P
2f6b0 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61  3.**.** Obtain a
2f6c0 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69   lock on a parti
2f6d0 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69  cular table. Thi
2f6e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2f6f0 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a   only used when.
2f700 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  ** the shared-ca
2f710 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65  che feature is e
2f720 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50  nabled. .**.** P
2f730 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
2f740 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2f750 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
2f760 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
2f770 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
2f780 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
2f790 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
2f7a0 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
2f7b0 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
2f7c0 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
2f7d0 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
2f7e0 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
2f7f0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
2f800 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
2f810 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
2f820 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
2f830 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2f840 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
2f850 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
2f860 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
2f870 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
2f880 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
2f890 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
2f8a0 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
2f8b0 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c   {.  u8 isWriteL
2f8c0 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
2f8d0 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65  3;.  if( isWrite
2f8e0 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e  Lock || 0==(db->
2f8f0 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61  flags&SQLITE_Rea
2f900 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b  dUncommitted) ){
2f910 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
2f920 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
2f930 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
2f940 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
2f950 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2f960 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2f970 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  p1) );.    asser
2f980 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
2f990 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
2f9a0 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==1 );.    rc = 
2f9b0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b  sqlite3BtreeLock
2f9c0 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31  Table(db->aDb[p1
2f9d0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ].pBt, pOp->p2, 
2f9e0 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20  isWriteLock);.  
2f9f0 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d    if( (rc&0xFF)=
2fa00 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
2fa10 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
2fa20 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ar *z = pOp->p4.
2fa30 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  z;.      sqlite3
2fa40 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2fa50 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61  rrMsg, db, "data
2fa60 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f  base table is lo
2fa70 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20  cked: %s", z);. 
2fa80 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
2fa90 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2faa0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2fab0 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64  _CACHE */..#ifnd
2fac0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2fad0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2fae0 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20  pcode: VBegin * 
2faf0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2fb00 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74  4 may be a point
2fb10 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
2fb20 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2fb30 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65   If so, call the
2fb40 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68   .** xBegin meth
2fb50 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
2fb60 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77  e..**.** Also, w
2fb70 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34  hether or not P4
2fb80 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74   is set, check t
2fb90 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  hat this is not 
2fba0 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f  being called fro
2fbb0 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61  m.** within a ca
2fbc0 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74  llback to a virt
2fbd0 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28  ual table xSync(
2fbe0 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20  ) method. If it 
2fbf0 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a  is, the error.**
2fc00 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65   code will be se
2fc10 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  t to SQLITE_LOCK
2fc20 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ED..*/.case OP_V
2fc30 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c  Begin: {.  VTabl
2fc40 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61  e *pVTab;.  pVTa
2fc50 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
2fc60 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
2fc70 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
2fc80 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54  VTab);.  if( pVT
2fc90 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62  ab ) sqlite3Vtab
2fca0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2fcb0 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20  pVTab->pVtab);. 
2fcc0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2fcd0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2fce0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2fcf0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2fd00 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2fd10 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72  E./* Opcode: VCr
2fd20 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  eate P1 * * P4 *
2fd30 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
2fd40 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
2fd50 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
2fd60 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68  base P1. Call th
2fd70 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64  e xCreate method
2fd80 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62  .** for that tab
2fd90 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
2fda0 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d  Create: {.  rc =
2fdb0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2fdc0 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e  Create(db, pOp->
2fdd0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26  p1, pOp->p4.z, &
2fde0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62  p->zErrMsg);.  b
2fdf0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2fe00 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2fe10 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2fe20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2fe30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2fe40 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74  /* Opcode: VDest
2fe50 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  roy P1 * * P4 *.
2fe60 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2fe70 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2fe80 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2fe90 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68  ase P1.  Call th
2fea0 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  e xDestroy metho
2feb0 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  d.** of that tab
2fec0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
2fed0 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e  Destroy: {.  p->
2fee0 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32  inVtabMethod = 2
2fef0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2ff00 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
2ff10 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2ff20 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e  ->p4.z);.  p->in
2ff30 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2ff40 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ff50 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2ff60 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2ff70 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ff80 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ff90 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f  LE./* Opcode: VO
2ffa0 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  pen P1 * * P4 *.
2ffb0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2ffc0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2ffd0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2ffe0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2fff0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50   structure..** P
30000 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75  1 is a cursor nu
30010 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f  mber.  This opco
30020 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f  de opens a curso
30030 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  r to the virtual
30040 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74  .** table and st
30050 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72  ores that cursor
30060 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20   in P1..*/.case 
30070 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  OP_VOpen: {.  Vd
30080 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
30090 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
300a0 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73  ursor *pVtabCurs
300b0 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  or;.  sqlite3_vt
300c0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
300d0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
300e0 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  dule;..  assert(
300f0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
30100 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70  .  pCur = 0;.  p
30110 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a  VtabCursor = 0;.
30120 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
30130 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
30140 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
30150 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
30160 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
30170 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
30180 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d  pModule);.  rc =
30190 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
301a0 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72  pVtab, &pVtabCur
301b0 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  sor);.  sqlite3V
301c0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
301d0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
301e0 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29   SQLITE_OK==rc )
301f0 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  {.    /* Initial
30200 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
30210 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
30220 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43  ss */.    pVtabC
30230 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70  ursor->pVtab = p
30240 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  Vtab;..    /* In
30250 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75  itialize vdbe cu
30260 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
30270 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61     pCur = alloca
30280 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
30290 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a  >p1, 0, -1, 0);.
302a0 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a      if( pCur ){.
302b0 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61        pCur->pVta
302c0 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43  bCursor = pVtabC
302d0 75 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  ursor;.    }else
302e0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c  {.      db->mall
302f0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
30300 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
30310 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
30320 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
30330 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30340 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30350 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30360 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30370 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
30380 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
30390 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
303a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c  ** Synopsis: ipl
303b0 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27  an=r[P3] zplan='
303c0 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P4'.**.** P1 is 
303d0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
303e0 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
303f0 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
30400 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
30410 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
30420 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
30430 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
30440 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
30450 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
30460 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
30470 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
30480 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
30490 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
304a0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
304b0 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
304c0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
304d0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
304e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
304f0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
30500 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
30510 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
30520 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
30530 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
30540 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
30550 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
30560 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
30570 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
30580 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
30590 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
305a0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
305b0 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
305c0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
305d0 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
305e0 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
305f0 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
30600 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
30610 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
30620 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
30630 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
30640 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
30650 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
30660 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
30670 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
30680 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
30690 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
306a0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
306b0 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
306c0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
306d0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
306e0 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
306f0 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
30700 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
30710 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
30720 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
30730 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
30740 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
30750 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
30760 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
30770 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
30780 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
30790 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
307a0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
307b0 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
307c0 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
307d0 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
307e0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
307f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
30800 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
30810 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
30820 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
30830 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
30840 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
30850 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62  ursor );.  pVtab
30860 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70  Cursor = pCur->p
30870 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56  VtabCursor;.  pV
30880 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f  tab = pVtabCurso
30890 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
308a0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
308b0 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
308c0 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
308d0 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
308e0 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
308f0 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
30900 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
30910 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
30920 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
30930 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
30940 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
30950 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
30960 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
30970 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
30980 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20   */.  {.    res 
30990 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  = 0;.    apArg =
309a0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66   p->apArg;.    f
309b0 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
309c0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70  ; i++){.      ap
309d0 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
309e0 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  i+1];.    }..   
309f0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
30a00 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
30a10 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
30a20 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
30a30 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
30a40 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
30a50 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
30a60 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
30a70 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
30a80 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
30a90 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
30aa0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73  _OK ){.      res
30ab0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
30ac0 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
30ad0 20 20 20 7d 0a 20 20 20 20 56 64 62 65 42 72 61     }.    VdbeBra
30ae0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
30af0 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
30b00 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
30b10 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
30b20 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  .  }.  pCur->nul
30b30 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65  lRow = 0;..  bre
30b40 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30b50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30b60 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
30b70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30b80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30b90 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
30ba0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
30bb0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
30bc0 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a  =vcolumn(P2).**.
30bd0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
30be0 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
30bf0 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
30c00 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
30c10 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
30c20 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
30c30 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
30c40 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
30c50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
30c60 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
30c70 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
30c80 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
30c90 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
30ca0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
30cb0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
30cc0 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
30cd0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
30ce0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
30cf0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
30d00 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
30d10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
30d20 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
30d30 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
30d40 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
30d50 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
30d60 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
30d70 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
30d80 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
30d90 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
30da0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
30db0 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
30dc0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
30dd0 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
30de0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
30df0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
30e00 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
30e10 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
30e20 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
30e30 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
30e40 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
30e50 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75  ;.  sContext.pOu
30e60 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d  t = pDest;.  Mem
30e70 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
30e80 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
30e90 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
30ea0 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
30eb0 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
30ec0 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
30ed0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
30ee0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
30ef0 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
30f00 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
30f10 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
30f20 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
30f30 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
30f40 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65  ncoding(pDest, e
30f50 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
30f60 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
30f70 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
30f80 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
30f90 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
30fa0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
30fb0 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
30fc0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
30fd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
30fe0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
30ff0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31000 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
31010 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
31020 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
31030 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
31040 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
31050 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
31060 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
31070 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
31080 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
31090 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
310a0 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
310b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
310c0 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
310d0 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
310e0 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
310f0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
31100 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
31110 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
31120 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
31130 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
31140 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
31150 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
31160 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
31170 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43  int res;.  VdbeC
31180 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
31190 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20  res = 0;.  pCur 
311a0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
311b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
311c0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
311d0 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
311e0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
311f0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
31200 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
31210 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
31220 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
31230 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
31240 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  rt( pModule->xNe
31250 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  xt );..  /* Invo
31260 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d  ke the xNext() m
31270 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
31280 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  ule. There is no
31290 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a   way for the.  *
312a0 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70  * underlying imp
312b0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72  lementation to r
312c0 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
312d0 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72  f one occurs dur
312e0 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29  ing.  ** xNext()
312f0 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e  . Instead, if an
31300 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74   error occurs, t
31310 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  rue is returned 
31320 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74  (indicating that
31330 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61   .  ** data is a
31340 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68  vailable) and th
31350 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74  e error code ret
31360 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75  urned when xColu
31370 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20  mn or.  ** some 
31380 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20  other method is 
31390 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  next invoked on 
313a0 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c  the save virtual
313b0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20   table cursor.. 
313c0 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d   */.  p->inVtabM
313d0 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20  ethod = 1;.  rc 
313e0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  = pModule->xNext
313f0 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
31400 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  or);.  p->inVtab
31410 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71  Method = 0;.  sq
31420 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
31430 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
31440 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
31450 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20  E_OK ){.    res 
31460 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
31470 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31480 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  r);.  }.  VdbeBr
31490 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32  anchTaken(!res,2
314a0 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  );.  if( !res ){
314b0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
314c0 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
314d0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d  o P2 */.    pc =
314e0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
314f0 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
31500 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
31510 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
31520 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
31530 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
31540 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31550 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
31560 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
31570 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
31580 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
31590 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
315a0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
315b0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
315c0 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
315d0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
315e0 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
315f0 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
31600 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
31610 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
31620 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
31630 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
31640 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
31650 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
31660 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
31670 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65  tab *pVtab;.  Me
31680 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74  m *pName;..  pVt
31690 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
316a0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61  ab->pVtab;.  pNa
316b0 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  me = &aMem[pOp->
316c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
316d0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
316e0 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65  Rename );.  asse
316f0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
31700 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72  Name) );.  asser
31710 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
31720 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  0 );.  REGISTER_
31730 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
31740 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28  Name);.  assert(
31750 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20   pName->flags & 
31760 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73  MEM_Str );.  tes
31770 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
31780 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
31790 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
317a0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
317b0 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65  _UTF16BE );.  te
317c0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
317d0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
317e0 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  LE );.  rc = sql
317f0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
31800 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51  coding(pName, SQ
31810 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66  LITE_UTF8);.  if
31820 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
31830 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61  ){.    rc = pVta
31840 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
31850 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65  ame(pVtab, pName
31860 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ->z);.    sqlite
31870 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
31880 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
31890 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
318a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
318b0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
318c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
318d0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
318e0 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50  de: VUpdate P1 P
318f0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
31900 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50  nopsis: data=r[P
31910 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69  3@P2].**.** P4 i
31920 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
31930 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
31940 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
31950 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
31960 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
31970 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
31980 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
31990 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
319a0 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
319b0 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
319c0 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
319d0 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
319e0 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
319f0 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
31a00 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
31a10 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
31a20 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
31a30 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
31a40 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
31a50 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
31a60 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
31a70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
31a80 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
31a90 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
31aa0 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
31ab0 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
31ac0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
31ad0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
31ae0 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
31af0 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
31b00 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
31b10 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
31b20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
31b30 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
31b40 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
31b50 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
31b60 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
31b70 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
31b80 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
31b90 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
31ba0 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
31bb0 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
31bc0 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
31bd0 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
31be0 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
31bf0 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
31c00 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
31c10 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
31c20 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
31c30 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
31c40 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
31c50 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
31c60 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
31c70 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
31c80 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
31c90 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
31ca0 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
31cb0 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
31cc0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
31cd0 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
31ce0 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
31cf0 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
31d00 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
31d10 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
31d20 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
31d30 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35  serted..**.** P5
31d40 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63   is the error ac
31d50 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63  tions (OE_Replac
31d60 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49  e, OE_Fail, OE_I
31d70 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a  gnore, etc) to.*
31d80 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63  * apply in the c
31d90 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61  ase of a constra
31da0 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61  int failure on a
31db0 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61  n insert or upda
31dc0 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  te..*/.case OP_V
31dd0 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
31de0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
31df0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
31e00 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
31e10 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
31e20 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
31e30 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
31e40 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
31e50 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
31e60 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
31e70 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
31e80 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
31e90 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
31ea0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
31eb0 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
31ec0 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
31ed0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
31ee0 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
31ef0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
31f00 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
31f10 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
31f20 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
31f30 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
31f40 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
31f50 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f  ule;.  nArg = pO
31f60 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
31f70 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
31f80 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41  _VTAB );.  if( A
31f90 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78  LWAYS(pModule->x
31fa0 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75  Update) ){.    u
31fb0 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
31fc0 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e   = db->vtabOnCon
31fd0 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67  flict;.    apArg
31fe0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
31ff0 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d   pX = &aMem[pOp-
32000 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
32010 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
32020 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
32030 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b  emIsValid(pX) );
32040 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
32050 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a  oChange(p, pX);.
32060 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
32070 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b   pX;.      pX++;
32080 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76  .    }.    db->v
32090 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
320a0 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20  pOp->p5;.    rc 
320b0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  = pModule->xUpda
320c0 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20  te(pVtab, nArg, 
320d0 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a  apArg, &rowid);.
320e0 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
320f0 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43  nflict = vtabOnC
32100 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c  onflict;.    sql
32110 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
32120 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
32130 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
32140 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31  TE_OK && pOp->p1
32150 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
32160 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72  ( nArg>1 && apAr
32170 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30  g[0] && (apArg[0
32180 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  ]->flags&MEM_Nul
32190 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  l) );.      db->
321a0 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
321b0 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
321c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63     }.    if( (rc
321d0 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
321e0 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70  ONSTRAINT && pOp
321f0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e  ->p4.pVtab->bCon
32200 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20  straint ){.     
32210 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45   if( pOp->p5==OE
32220 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
32230 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
32240 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  K;.      }else{.
32250 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72          p->error
32260 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e  Action = ((pOp->
32270 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20  p5==OE_Replace) 
32280 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70  ? OE_Abort : pOp
32290 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->p5);.      }. 
322a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
322b0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
322c0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
322d0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
322e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
322f0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
32300 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
32310 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
32320 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e  Opcode: Pagecoun
32330 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
32340 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
32350 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  rrent number of 
32360 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73  pages in databas
32370 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63  e P1 to memory c
32380 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ell P2..*/.case 
32390 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20  OP_Pagecount: { 
323a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
323b0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
323c0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
323d0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
323e0 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  age(db->aDb[pOp-
323f0 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65  >p1].pBt);.  bre
32400 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
32410 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
32420 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
32430 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78  S./* Opcode: Max
32440 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a  Pgcnt P1 P2 P3 *
32450 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20   *.**.** Try to 
32460 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  set the maximum 
32470 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64  page count for d
32480 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68  atabase P1 to th
32490 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a  e value in P3..*
324a0 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65  * Do not let the
324b0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
324c0 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74  unt fall below t
324d0 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20  he current page 
324e0 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20  count and.** do 
324f0 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d  not change the m
32500 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
32510 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
32520 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ..**.** Store th
32530 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
32540 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63  ount after the c
32550 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65  hange in registe
32560 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
32570 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20  _MaxPgcnt: {    
32580 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
32590 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
325a0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77  unsigned int new
325b0 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  Max;.  Btree *pB
325c0 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  t;..  pBt = db->
325d0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
325e0 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a  ;.  newMax = 0;.
325f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
32600 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71  .    newMax = sq
32610 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
32620 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28  ge(pBt);.    if(
32630 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67   newMax < (unsig
32640 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65  ned)pOp->p3 ) ne
32650 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64  wMax = (unsigned
32660 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20  )pOp->p3;.  }.  
32670 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
32680 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43  te3BtreeMaxPageC
32690 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78  ount(pBt, newMax
326a0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
326b0 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
326c0 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34  : Init * P2 * P4
326d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
326e0 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a   Start at P2.**.
326f0 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74  ** Programs cont
32700 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ain a single ins
32710 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70  tance of this op
32720 63 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79  code as the very
32730 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65   first.** opcode
32740 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69  ..**.** If traci
32750 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62  ng is enabled (b
32760 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72  y the sqlite3_tr
32770 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65  ace()) interface
32780 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54  , then.** the UT
32790 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  F-8 string conta
327a0 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d  ined in P4 is em
327b0 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61  itted on the tra
327c0 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20  ce callback..** 
327d0 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e  Or if P4 is blan
327e0 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e  k, use the strin
327f0 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  g returned by sq
32800 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a  lite3_sql()..**.
32810 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20  ** If P2 is not 
32820 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  zero, jump to in
32830 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
32840 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b  .case OP_Init: {
32850 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
32860 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72  p */.  char *zTr
32870 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  ace;.  char *z;.
32880 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29  .  if( pOp->p2 )
32890 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
328a0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e  p2 - 1;.  }.#ifn
328b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
328c0 54 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e  TRACE.  if( db->
328d0 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d  xTrace.   && !p-
328e0 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26  >doingRerun.   &
328f0 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
32900 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
32910 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
32920 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73  0.  ){.    z = s
32930 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64  qlite3VdbeExpand
32940 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a  Sql(p, zTrace);.
32950 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
32960 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29  b->pTraceArg, z)
32970 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
32980 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a  ree(db, z);.  }.
32990 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
329a0 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20  E_FCNTL_TRACE.  
329b0 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
329c0 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
329d0 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66  : p->zSql);.  if
329e0 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ( zTrace ){.    
329f0 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69  int i;.    for(i
32a00 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
32a10 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44  ++){.      if( D
32a20 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
32a30 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20  eeMask, i)==0 ) 
32a40 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
32a50 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
32a60 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62  trol(db, db->aDb
32a70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54  [i].zName, SQLIT
32a80 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a  E_FCNTL_TRACE, z
32a90 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20  Trace);.    }.  
32aa0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
32ab0 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
32ac0 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  CE */.#ifdef SQL
32ad0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
32ae0 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
32af0 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
32b00 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
32b10 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
32b20 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
32b30 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
32b40 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
32b50 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
32b60 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
32b70 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
32b80 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
32b90 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
32ba0 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62 72  IT_TRACE */.  br
32bb0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
32bc0 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a  de: Noop * * * *
32bd0 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68   *.**.** Do noth
32be0 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72  ing.  This instr
32bf0 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20  uction is often 
32c00 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70  useful as a jump
32c10 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e  .** destination.
32c20 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  .*/./*.** The ma
32c30 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f  gic Explain opco
32c40 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65  de are only inse
32c50 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69  rted when explai
32c60 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69  n==2 (which.** i
32c70 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68  s to say when th
32c80 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
32c90 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75  PLAN syntax is u
32ca0 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70  sed.).** This op
32cb0 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66  code records inf
32cc0 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
32cd0 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74  e optimizer.  It
32ce0 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73   is the.** the s
32cf0 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20  ame as a no-op. 
32d00 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76   This opcodesnev
32d10 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20  er appears in a 
32d20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e  real VM program.
32d30 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20  .*/.default: {  
32d40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20          /* This 
32d50 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f  is really OP_Noo
32d60 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e  p and OP_Explain
32d70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
32d80 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
32d90 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  op || pOp->opcod
32da0 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b  e==OP_Explain );
32db0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a  .  break;.}../**
32dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54  ***********.** T
32e10 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20  he cases of the 
32e20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
32e30 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65   above this line
32e40 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69   should all be i
32e50 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20  ndented.** by 6 
32e60 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65  spaces.  But the
32e70 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61   left-most 6 spa
32e80 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ces have been re
32e90 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65  moved to improve
32ea0 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c   the.** readabil
32eb0 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20  ity.  From this 
32ec0 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74  point on down, t
32ed0 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  he normal indent
32ee0 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a  ation rules are.
32ef0 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a  ** restored..***
32f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20  **********/.    
32f50 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  }..#ifdef VDBE_P
32f60 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20  ROFILE.    {.   
32f70 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d     u64 endTime =
32f80 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
32f90 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64 54  ;.      if( endT
32fa0 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 70 2d  ime>start ) pOp-
32fb0 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69  >cycles += endTi
32fc0 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20  me - start;.    
32fd0 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20    pOp->cnt++;.  
32fe0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
32ff0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
33000 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69   code adds nothi
33010 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  ng to the actual
33020 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20   functionality. 
33030 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f     ** of the pro
33040 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c  gram.  It is onl
33050 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69  y here for testi
33060 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  ng and debugging
33070 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20  ..    ** On the 
33080 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64  other hand, it d
33090 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63  oes burn CPU cyc
330a0 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74  les every time t
330b0 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68  hrough.    ** th
330c0 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70  e evaluator loop
330d0 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61  .  So we can lea
330e0 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e  ve it out when N
330f0 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
33100 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66  ..    */.#ifndef
33110 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65   NDEBUG.    asse
33120 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63  rt( pc>=-1 && pc
33130 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64  <p->nOp );..#ifd
33140 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
33150 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
33160 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
33170 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
33180 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66  ( rc!=0 ) printf
33190 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a  ("rc=%d\n",rc);.
331a0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f        if( pOp->o
331b0 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f  pflags & (OPFLG_
331c0 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c  OUT2_PRERELEASE|
331d0 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20  OPFLG_OUT2) ){. 
331e0 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
331f0 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61  race(pOp->p2, &a
33200 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
33210 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
33220 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
33230 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20  OPFLG_OUT3 ){.  
33240 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
33250 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ace(pOp->p3, &aM
33260 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
33270 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
33280 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  if  /* SQLITE_DE
33290 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f  BUG */.#endif  /
332a0 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20  * NDEBUG */.  } 
332b0 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74   /* The end of t
332c0 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20  he for(;;) loop 
332d0 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67  the loops throug
332e0 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20  h opcodes */..  
332f0 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74  /* If we reach t
33300 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65  his point, it me
33310 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69  ans that executi
33320 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77  on is finished w
33330 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f  ith.  ** an erro
33340 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a  r of some kind..
33350 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f    */.vdbe_error_
33360 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20  halt:.  assert( 
33370 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  rc );.  p->rc = 
33380 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  rc;.  testcase( 
33390 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
333a0 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20  fig.xLog!=0 );. 
333b0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c   sqlite3_log(rc,
333c0 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72   "statement abor
333d0 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25  ts at %d: [%s] %
333e0 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  s", .           
333f0 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a          pc, p->z
33400 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
33410 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48  ;.  sqlite3VdbeH
33420 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63  alt(p);.  if( rc
33430 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  ==SQLITE_IOERR_N
33440 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f  OMEM ) db->mallo
33450 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72  cFailed = 1;.  r
33460 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
33470 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68  ;.  if( resetSch
33480 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a  emaOnFault>0 ){.
33490 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
334a0 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65  OneSchema(db, re
334b0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
334c0 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  -1);.  }..  /* T
334d0 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
334e0 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20  way out of this 
334f0 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68  procedure.  We h
33500 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65  ave to.  ** rele
33510 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20  ase the mutexes 
33520 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77  on btrees that w
33530 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20  ere acquired at 
33540 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f  the.  ** top. */
33550 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20  .vdbe_return:.  
33560 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
33570 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73  lastRowid;.  tes
33580 74 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30  tcase( nVmStep>0
33590 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65   );.  p->aCounte
335a0 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
335b0 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20  TUS_VM_STEP] += 
335c0 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20  (int)nVmStep;.  
335d0 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65  sqlite3VdbeLeave
335e0 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  (p);.  return rc
335f0 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
33600 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67  here if a string
33610 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20   or blob larger 
33620 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f  than SQLITE_MAX_
33630 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65  LENGTH.  ** is e
33640 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f  ncountered..  */
33650 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69  .too_big:.  sqli
33660 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
33670 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73  >zErrMsg, db, "s
33680 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
33690 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20  o big");.  rc = 
336a0 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20  SQLITE_TOOBIG;. 
336b0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
336c0 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
336d0 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d  p to here if a m
336e0 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20  alloc() fails.. 
336f0 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62   */.no_mem:.  db
33700 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
33710 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74   1;.  sqlite3Set
33720 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
33730 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20  sg, db, "out of 
33740 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d  memory");.  rc =
33750 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
33760 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
33770 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
33780 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
33790 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20  y other kind of 
337a0 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68  fatal error.  Th
337b0 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a  e "rc" variable.
337c0 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64    ** should hold
337d0 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65   the error numbe
337e0 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  r..  */.abort_du
337f0 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73  e_to_error:.  as
33800 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67  sert( p->zErrMsg
33810 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ==0 );.  if( db-
33820 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
33830 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
33840 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  M;.  if( rc!=SQL
33850 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
33860 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
33870 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
33880 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
33890 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
338a0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
338b0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
338c0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
338d0 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
338e0 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
338f0 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
33900 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
33910 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
33920 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
33930 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
33940 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
33950 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
33960 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
33970 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65   rc;.  sqlite3Se
33980 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
33990 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
339a0 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
339b0 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  );.  goto vdbe_e
339c0 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a           rror_halt;.}.