/ Hex Artifact Content
Login

Artifact 51e754eec26d892abc6279f5e949545af68ec1b3:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fa0: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a  T_BUILTIN_TEST).
0fb0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
0fc0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20  MAX_BLOBSIZE(P) 
0fd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0fe0: 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  ze(P).#else.# de
0ff0: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1000: 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64  BLOBSIZE(P).#end
1010: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  if../*.** Invoke
1020: 20 74 68 65 20 56 44 42 45 20 63 6f 76 65 72 61   the VDBE covera
1030: 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20  ge callback, if 
1040: 74 68 61 74 20 63 61 6c 6c 62 61 63 6b 20 69 73  that callback is
1050: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 69 73 0a   defined.  This.
1060: 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 75 73  ** feature is us
1070: 65 64 20 66 6f 72 20 74 65 73 74 20 73 75 69 74  ed for test suit
1080: 65 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c  e validation onl
1090: 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  y and does not a
10a0: 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64  ppear an.** prod
10b0: 75 63 74 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a  uction builds..*
10c0: 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74  *.** M is an int
10d0: 65 67 65 72 2c 20 32 20 6f 72 20 33 2c 20 74 68  eger, 2 or 3, th
10e0: 61 74 20 69 6e 64 69 63 65 73 20 68 6f 77 20 6d  at indices how m
10f0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
1100: 79 73 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  ys the.** branch
1110: 20 63 61 6e 20 67 6f 2e 20 20 49 74 20 69 73 20   can go.  It is 
1120: 75 73 75 61 6c 6c 79 20 32 2e 20 20 22 49 22 20  usually 2.  "I" 
1130: 69 73 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e  is the direction
1140: 20 74 68 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67   the branch.** g
1150: 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73 20 66 61  oes.  0 means fa
1160: 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20 20 31 20  lls through.  1 
1170: 6d 65 61 6e 73 20 62 72 61 6e 63 68 20 69 73 20  means branch is 
1180: 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20  taken.  2 means 
1190: 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c  the.** second al
11a0: 74 65 72 6e 61 74 69 76 65 20 62 72 61 6e 63 68  ternative branch
11b0: 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a   is taken..**.**
11c0: 20 69 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65   iSrcLine is the
11d0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e   source code lin
11e0: 65 20 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49  e (from the __LI
11f0: 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74  NE__ macro) that
1200: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68  .** generated th
1210: 65 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  e VDBE instructi
1220: 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  on.  This instru
1230: 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73 75 6d 65  mentation assume
1240: 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f  s that all.** so
1250: 75 72 63 65 20 63 6f 64 65 20 69 73 20 69 6e 20  urce code is in 
1260: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 28 74  a single file (t
1270: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 29  he amalgamation)
1280: 2e 20 20 53 70 65 63 69 61 6c 20 76 61 6c 75 65  .  Special value
1290: 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20 66 6f 72  s 1.** and 2 for
12a0: 20 74 68 65 20 69 53 72 63 4c 69 6e 65 20 70 61   the iSrcLine pa
12b0: 72 61 6d 65 74 65 72 20 6d 65 61 6e 20 74 68 61  rameter mean tha
12c0: 74 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  t this particula
12d0: 72 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a 20 61  r branch is.** a
12e0: 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f 72 20 6e  lways taken or n
12f0: 65 76 65 72 20 74 61 6b 65 6e 2c 20 72 65 73 70  ever taken, resp
1300: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66  ectively..*/.#if
1310: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1320: 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a  _VDBE_COVERAGE).
1330: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1340: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65  nchTaken(I,M).#e
1350: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62  lse.# define Vdb
1360: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1370: 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  ) vdbeTakeBranch
1380: 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49  (pOp->iSrcLine,I
1390: 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69  ,M).  static voi
13a0: 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  d vdbeTakeBranch
13b0: 28 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75  (int iSrcLine, u
13c0: 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20  8 I, u8 M){.    
13d0: 69 66 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20  if( iSrcLine<=2 
13e0: 26 26 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69  && ALWAYS(iSrcLi
13f0: 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d  ne>0) ){.      M
1400: 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20   = iSrcLine;.   
1410: 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65     /* Assert the
1420: 20 74 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f   truth of VdbeCo
1430: 76 65 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65  verageAlwaysTake
1440: 6e 28 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a  n() and .      *
1450: 2a 20 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65  * VdbeCoverageNe
1460: 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20  verTaken() */.  
1470: 20 20 20 20 61 73 73 65 72 74 28 20 28 4d 20 26      assert( (M &
1480: 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65   I)==I );.    }e
1490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73  lse{.      if( s
14a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14b0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
14c0: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
14d0: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73  O_TEST*/.      s
14e0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14f0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73  ig.xVdbeBranch(s
1500: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1510: 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72  ig.pVdbeBranchAr
1520: 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g,.             
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e           iSrcLin
1550: 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20  e,I,M);.    }.  
1560: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1570: 43 6f 6e 76 65 72 74 20 74 68 65 20 67 69 76 65  Convert the give
1580: 6e 20 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20  n register into 
1590: 61 20 73 74 72 69 6e 67 20 69 66 20 69 74 20 69  a string if it i
15a0: 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65  sn't one.** alre
15b0: 61 64 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  ady. Return non-
15c0: 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63  zero if a malloc
15d0: 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65  () fails..*/.#de
15e0: 66 69 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50  fine Stringify(P
15f0: 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28  , enc) \.   if((
1600: 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (P)->flags&(MEM_
1610: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
1620: 30 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  0 && sqlite3Vdbe
1630: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65  MemStringify(P,e
1640: 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20 20 7b 20  nc,0)) \.     { 
1650: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a  goto no_mem; }..
1660: 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65 72  /*.** An ephemer
1670: 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  al string value 
1680: 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74 68  (signified by th
1690: 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61 67  e MEM_Ephem flag
16a0: 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61 20  ) contains.** a 
16b0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79 6e  pointer to a dyn
16c0: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
16d0: 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65 20  ed string where 
16e0: 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69 74  some other entit
16f0: 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73 69  y.** is responsi
1700: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
1710: 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e 67  ting that string
1720: 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 72  .  Because the r
1730: 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73 20  egister.** does 
1740: 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20  not control the 
1750: 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68 74  string, it might
1760: 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74 68   be deleted with
1770: 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65 72  out the register
1780: 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a  .** knowing it..
1790: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
17a0: 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 65  ne converts an e
17b0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
17c0: 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  into a dynamical
17d0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  ly allocated.** 
17e0: 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65 20  string that the 
17f0: 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66 20  register itself 
1800: 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f 74  controls.  In ot
1810: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a 2a  her words, it.**
1820: 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45 4d   converts an MEM
1830: 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69 6e  _Ephem string in
1840: 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  to a string with
1850: 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e   P.z==P.zMalloc.
1860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1870: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1880: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1890: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
18a0: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
18b0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
18c0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
18d0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
18e0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18f0: 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f  the cursor was o
1900: 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1910: 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70  OP_OpenSorter op
1920: 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  code. */.#define
1930: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
1940: 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  )->eCurType==CUR
1950: 54 59 50 45 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a  TYPE_SORTER)../*
1960: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62  .** Allocate Vdb
1970: 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69  eCursor number i
1980: 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70  Cur.  Return a p
1990: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52  ointer to it.  R
19a0: 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66  eturn NULL.** if
19b0: 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d   we run out of m
19c0: 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  emory..*/.static
19d0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c   VdbeCursor *all
19e0: 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56  ocateCursor(.  V
19f0: 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  dbe *p,         
1a00: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
1a10: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
1a20: 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20   int iCur,      
1a30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a40: 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43  of the new VdbeC
1a50: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  ursor */.  int n
1a60: 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20  Field,          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
1a80: 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  elds in the tabl
1a90: 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20  e or index */.  
1aa0: 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20  int iDb,        
1ab0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1ac0: 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c  e the cursor bel
1ad0: 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a  ongs to, or -1 *
1ae0: 2f 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 20  /.  u8 eCurType 
1af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70            /* Typ
1b00: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 75 72  e of the new cur
1b10: 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  sor */.){.  /* F
1b20: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1b30: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1b40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b50: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1b60: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1b70: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1b80: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b90: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ba0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1bb0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bc0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bd0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1be0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1bf0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1c00: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1c10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1c20: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1c30: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1c40: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1c50: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1c60: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1c70: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1c80: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1c90: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1ca0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1cb0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1cc0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1cd0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ce0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1cf0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1d00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1d10: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1d20: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1d30: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1d40: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1d50: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1d60: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1d70: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1d80: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1d90: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1da0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1dc0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1dd0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 65 6d   **.  ** The mem
1df0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 63 75 72  ory cell for cur
1e00: 73 6f 72 20 30 20 69 73 20 61 4d 65 6d 5b 30 5d  sor 0 is aMem[0]
1e10: 2e 20 54 68 65 20 72 65 73 74 20 61 72 65 20 61  . The rest are a
1e20: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 20 20  llocated from.  
1e30: 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  ** the top of th
1e40: 65 20 72 65 67 69 73 74 65 72 20 73 70 61 63 65  e register space
1e50: 2e 20 20 43 75 72 73 6f 72 20 31 20 69 73 20 61  .  Cursor 1 is a
1e60: 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 31 5d  t Mem[p->nMem-1]
1e70: 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72 20 32 20  ..  ** Cursor 2 
1e80: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
1e90: 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20 66 6f 72  m-2]. And so for
1ea0: 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  th..  */.  Mem *
1eb0: 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30 20 3f 20  pMem = iCur>0 ? 
1ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ed0: 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61 4d 65 6d  -iCur] : p->aMem
1ee0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ef0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f00: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f10: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1f20: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1f30: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1f40: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1f50: 20 20 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55     (eCurType==CU
1f60: 52 54 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69  RTYPE_BTREE?sqli
1f70: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f80: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1f90: 72 74 28 20 69 43 75 72 3e 3d 30 20 26 26 20 69  rt( iCur>=0 && i
1fa0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
1fb0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
1fc0: 5b 69 43 75 72 5d 20 29 7b 20 2f 2a 4f 50 54 49  [iCur] ){ /*OPTI
1fd0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
1fe0: 45 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56  E*/.    sqlite3V
1ff0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2000: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2010: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2020: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2030: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2040: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2050: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2060: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2080: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
2090: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
20a0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
20b0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20c0: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43  r));.    pCx->eC
20d0: 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79 70  urType = eCurTyp
20e0: 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  e;.    pCx->iDb 
20f0: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
2100: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
2110: 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73 65  .    pCx->aOffse
2120: 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65 5b  t = &pCx->aType[
2130: 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28  nField];.    if(
2140: 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59   eCurType==CURTY
2150: 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2160: 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f    pCx->uc.pCurso
2170: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2180: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2190: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
21a0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
21b0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
21c0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
21d0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
21e0: 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  o(pCx->uc.pCurso
21f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2200: 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f  return pCx;.}../
2210: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2220: 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f  ert a value into
2230: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2240: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20  sentation if we 
2250: 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74  can.** do so wit
2260: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66  hout loss of inf
2270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  ormation.  In ot
2280: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2290: 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b  e string.** look
22a0: 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  s like a number,
22b0: 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f   convert it into
22c0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69   a number.  If i
22d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f  t does not.** lo
22e0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
22f0: 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65  , leave it alone
2300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62  ..**.** If the b
2310: 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69  TryForInt flag i
2320: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74  s true, then ext
2330: 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64  ra effort is mad
2340: 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20  e to give.** an 
2350: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2360: 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73  tation.  Strings
2370: 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20   that look like 
2380: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a  floating point.*
2390: 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68 69  * values but whi
23a0: 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74  ch have no fract
23b0: 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20  ional component 
23c0: 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30  (example: '48.00
23d0: 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20  ').** will have 
23e0: 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73  a MEM_Int repres
23f0: 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54  entation when bT
2400: 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65  ryForInt is true
2410: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46  ..**.** If bTryF
2420: 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20  orInt is false, 
2430: 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  then if the inpu
2440: 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  t string contain
2450: 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70  s a decimal.** p
2460: 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74  oint or exponent
2470: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68  ial notation, th
2480: 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79  e result is only
2490: 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a   MEM_Real, even.
24a0: 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ** if there is a
24b0: 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72 20  n exact integer 
24c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24d0: 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a  f the quantity..
24e0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
24f0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2500: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69  ity(Mem *pRec, i
2510: 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a  nt bTryForInt){.
2520: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2530: 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20  .  i64 iValue;. 
2540: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2550: 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 28  enc;.  assert( (
2560: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
2570: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d  EM_Str|MEM_Int|M
2580: 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53  EM_Real))==MEM_S
2590: 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
25a0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
25b0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
25c0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
25d0: 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  urn;.  if( 0==sq
25e0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
25f0: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2600: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2610: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
2620: 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d  Value;.    pRec-
2630: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e  >flags |= MEM_In
2640: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2650: 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c  pRec->u.r = rVal
2660: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2680: 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f 72  .    if( bTryFor
2690: 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64 62  Int ) sqlite3Vdb
26a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
26b0: 28 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  (pRec);.  }.}../
26c0: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
26d0: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
26e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
26f0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2710: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2720: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2730: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2740: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2750: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2760: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2770: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2780: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
27a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
27b0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
27c0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
27d0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
27e0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
27f0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2800: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2810: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2820: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2830: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2840: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2850: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2860: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2870: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2880: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2890: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
28a0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
28b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
28c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  .** SQLITE_AFF_B
28d0: 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  LOB:.**    No-op
28e0: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
28f0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2900: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2910: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2930: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2940: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2950: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2960: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2970: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2980: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
29a0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
29b0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
29c0: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
29d0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
29e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
29f0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a00: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a30: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2a50: 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28 20  ERIC );.    if( 
2a60: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
2a70: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a  EM_Int)==0 ){ /*
2a80: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
2a90: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
2aa0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2ab0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
2ac0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
2ad0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  c->flags & MEM_S
2ae0: 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69  tr ) applyNumeri
2af0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2b00: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2b20: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b30: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  }.    }.  }else 
2b50: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2b60: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2b70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2b80: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2b90: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2ba0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2bb0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2bc0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2bd0: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2be0: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2bf0: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2c00: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2c10: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 77  sentation.  It w
2c20: 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73  ould be harmless
2c30: 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20 63   to repeat the c
2c40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20 20  onversion if .  
2c50: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 6c    ** there is al
2c60: 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20 72  ready a string r
2c70: 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70 6f  ep, but it is po
2c80: 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74 65  intless to waste
2c90: 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50   those.    ** CP
2ca0: 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20  U cycles. */.   
2cb0: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2cc0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b  lags&MEM_Str) ){
2cd0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
2ce0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
2cf0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2d00: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2d10: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 20  Int)) ){.       
2d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d30: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
2d40: 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  nc, 1);.      }.
2d50: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2d60: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2d70: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
2d80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2d90: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2da0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2db0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2dc0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2dd0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2de0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2df0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2e00: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2e10: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2e20: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2e30: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2e40: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2e50: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2e60: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2e70: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2e80: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2e90: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2ea0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2eb0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2ec0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2ed0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20  e *pVal){.  int 
2ee0: 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f  eType = sqlite3_
2ef0: 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29  value_type(pVal)
2f00: 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d 53  ;.  if( eType==S
2f10: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
2f20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2f30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61 70  em*)pVal;.    ap
2f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2f50: 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20  ty(pMem, 0);.   
2f60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2f70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2f80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2f90: 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  eType;.}../*.** 
2fa0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2fb0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2fc0: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2fd0: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2fe0: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2ff0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
3000: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
3010: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
3020: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
3030: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
3040: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
3050: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
3060: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
3070: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
3080: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ity, enc);.}../*
3090: 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e 74  .** pMem current
30a0: 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20  ly only holds a 
30b0: 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72 20  string type (or 
30c0: 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68 61  maybe a BLOB tha
30d0: 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65  t we can.** inte
30e0: 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69 6e  rpret as a strin
30f0: 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f 29  g if we want to)
3100: 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20 63  .  Compute its c
3110: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3120: 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69 66  numeric type, if
3130: 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20 74   has one.  Set t
3140: 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64  he pMem->u.r and
3150: 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c 64   pMem->u.i field
3160: 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c 79  s.** accordingly
3170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20  ..*/.static u16 
3180: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
3190: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
31c0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
31d0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
31e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
31f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3200: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
3210: 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
3220: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
3230: 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d  &pMem->u.r, pMem
3240: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3250: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3260: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
3270: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
3280: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
3290: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
32a0: 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  enc)==SQLITE_OK 
32b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
32c0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
32d0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
32e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32f0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3300: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3310: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3320: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3330: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3340: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3350: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3360: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3370: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3380: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3390: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
33a0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
33b0: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
33c0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
33d0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
33e0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
33f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3400: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
3410: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
3420: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3430: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a  _Int|MEM_Real);.
3440: 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e    }.  if( pMem->
3450: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3460: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
3470: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65    return compute
3480: 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d  NumericType(pMem
3490: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a0: 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  0;.}..#ifdef SQL
34b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
34c0: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
34d0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
34e0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
34f0: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
3500: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
3510: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
3520: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3530: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3540: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
3550: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
3560: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
3570: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
3580: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
3590: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
35a0: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
35b0: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
35c0: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
35d0: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
35e0: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
35f0: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
3600: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3610: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
3620: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3630: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3640: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3650: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3660: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3670: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
3680: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3690: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
36a0: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
36b0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
36c0: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
36d0: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
36e0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
36f0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3700: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3720: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
3730: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
3760: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3770: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3780: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3790: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
37a0: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
37b0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
37c0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
37d0: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
37e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
37f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3800: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3810: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
3820: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
3830: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
3840: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3860: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
3870: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3880: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3890: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
38a0: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
38b0: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
38c0: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
38d0: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
38e0: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
38f0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3900: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3910: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3920: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3930: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3940: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3950: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
3960: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
3970: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3980: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
3990: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
39a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
39b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
39d0: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
39e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
39f0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
3a00: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
3a10: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
3a20: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
3a30: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3a40: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3a50: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3a60: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3a70: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3a80: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3a90: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3aa0: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3ab0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3ac0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3ad0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3ae0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3af0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3b00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
3b10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3b20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3b30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b50: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3b60: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3b70: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3b80: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3b90: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3ba0: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3bb0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3bc0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3bd0: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3be0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3bf0: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
3c00: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
3c10: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
3c20: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
3c30: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
3c40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
3c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3c60: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3c70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3c80: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3c90: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3ca0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3cb0: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3cc0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3cd0: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3ce0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3cf0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3d00: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
3d10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3d20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3d30: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
3d40: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
3d50: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3d60: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3d70: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3d80: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3d90: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3da0: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3db0: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3dc0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3dd0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3de0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3df0: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3e00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
3e10: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3e20: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
3e30: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
3e40: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
3e50: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3e70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3e80: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3e90: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3ea0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3eb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3ec0: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3ed0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3ee0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3ef0: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3f00: 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  u.r);.#endif.  }
3f10: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3f20: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3f30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3f40: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3f50: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3f60: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3f70: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3f80: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
3f90: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
3fa0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69  , zBuf);.  }.  i
3fb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3fc0: 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e  M_Subtype ) prin
3fd0: 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25  tf(" subtype=0x%
3fe0: 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70  02x", p->eSubtyp
3ff0: 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  e);.}.static voi
4000: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
4010: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
4020: 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47  ){.  printf("REG
4030: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
4040: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
4050: 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c  (p);.  printf("\
4060: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
4070: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4080: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
4090: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
40a0: 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51   if(db->flags&SQ
40b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72  LITE_VdbeTrace)r
40c0: 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d  egisterTrace(R,M
40d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
40e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
40f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
4100: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4110: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
4120: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
4130: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
4140: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
4150: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
4160: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
4170: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
4180: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
4190: 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ..#endif..#ifnde
41a0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
41b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
41c0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
41d0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
41e0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
41f0: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
4200: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
4220: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
4230: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
4240: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
4250: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
4260: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
4270: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
4280: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
4290: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
42a0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
42b0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
42c0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
42d0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
42e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
42f0: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
4300: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
4310: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
4320: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
4330: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
4340: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
4350: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
4360: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
4370: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
4380: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
4390: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
43a0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
43b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
43c0: 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70  gister of pOp->p
43d0: 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72  2 after first pr
43e0: 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65  eparing it to be
43f0: 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20  .** overwritten 
4400: 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20  with an integer 
4410: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4420: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
4430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4440: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65  easeWithClear(Me
4450: 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69  m *pOut){.  sqli
4460: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4470: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
4480: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
44a0: 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f  .}.static Mem *o
44b0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64  ut2Prerelease(Vd
44c0: 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70  be *p, VdbeOp *p
44d0: 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  Op){.  Mem *pOut
44e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
44f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
4500: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
4520: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
4530: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
4540: 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
4550: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
4560: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
4570: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f  namic(pOut) ){ /
4580: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
4590: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74  -FALSE*/.    ret
45a0: 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61  urn out2Prerelea
45b0: 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74  seWithClear(pOut
45c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
45d0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
45e0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72  M_Int;.    retur
45f0: 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a  n pOut;.  }.}...
4600: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4610: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4620: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4630: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4640: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4650: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4660: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4670: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
46a0: 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  ){.  Op *aOp = p
46b0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
46c0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
46d0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d  p */.  Op *pOp =
46e0: 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20   aOp;           
46f0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4700: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65  ration */.#if de
4710: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4720: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
4730: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f  DBE_PROFILE).  O
4740: 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20  p *pOrigOp;     
4750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
4760: 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65  ue of pOp at the
4770: 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70   top of the loop
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
4790: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
47a0: 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74   int nExtraDelet
47b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56  e = 0;      /* V
47c0: 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54  erifies FORDELET
47d0: 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  E and AUXDELETE 
47e0: 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  flags */.#endif.
47f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4800: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4810: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4820: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4830: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4840: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4850: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4860: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4870: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4880: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4890: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
48a0: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
48b0: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
48c0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
48d0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
48e0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4900: 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73 6f 6e   last comparison
4910: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
4920: 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20  VmStep = 0;     
4930: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
4940: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74  rtual machine st
4950: 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  eps */.#ifndef S
4960: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4970: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75  ESS_CALLBACK.  u
4980: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
4990: 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e  sLimit = 0;/* In
49a0: 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29  voke xProgress()
49b0: 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65   when nVmStep re
49c0: 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65  aches this */.#e
49d0: 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ndif.  Mem *aMem
49e0: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20   = p->aMem;     
49f0: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4a00: 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  aMem */.  Mem *p
4a10: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
4a20: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
4a30: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4a40: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
4a50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
4a60: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4a70: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
4a80: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4a90: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
4aa0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
4ab0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
4ac0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
4ad0: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a  erand */.  int *
4ae0: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20  aPermute = 0;   
4af0: 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61        /* Permuta
4b00: 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  tion of columns 
4b10: 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a  for OP_Compare *
4b20: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
4b30: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
4b40: 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c  d;  /* Saved val
4b50: 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69  ue of the last i
4b60: 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23  nsert ROWID */.#
4b70: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4b80: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ba0: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
4bb0: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
4bc0: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
4bd0: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
4be0: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
4bf0: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
4c00: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
4c10: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
4c20: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
4c30: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
4c40: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
4c50: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
4c60: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
4c70: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
4c80: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
4c90: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
4ca0: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
4cb0: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
4cc0: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
4cd0: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
4ce0: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
4cf0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
4d00: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
4d10: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
4d20: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
4d30: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
4d40: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
4d50: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
4d60: 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  =0 );.  p->rc = 
4d70: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e  SQLITE_OK;.  p->
4d80: 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30  iCurrentTime = 0
4d90: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
4da0: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
4db0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
4dc0: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
4dd0: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
4de0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
4df0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
4e00: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
4e10: 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74  terrupt;.  sqlit
4e20: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
4e30: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
4e40: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4e50: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
4e60: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
4e70: 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72  {.    u32 iPrior
4e80: 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53   = p->aCounter[S
4e90: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
4ea0: 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61  _VM_STEP];.    a
4eb0: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
4ec0: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
4ed0: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4ee0: 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  t = db->nProgres
4ef0: 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25  sOps - (iPrior %
4f00: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4f10: 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23  s);.  }.#endif.#
4f20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4f30: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4f40: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4f50: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
4f60: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
4f70: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
4f80: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
4f90: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
4fa0: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
4fb0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4fc0: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
4fd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4fe0: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4ff0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
5000: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
5010: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
5020: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
5030: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
5040: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
5050: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
5060: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5070: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
5080: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
5090: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
50a0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
50b0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
50c0: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
50d0: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
50e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
50f0: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
5100: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
5110: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
5120: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
5130: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
5140: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
5150: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
5160: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
5170: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
5180: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5190: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
51a0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
51b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
51c0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
51d0: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
51e0: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
51f0: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
5200: 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70  f.  for(pOp=&aOp
5210: 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b  [p->pc]; 1; pOp+
5220: 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72  +){.    /* Error
5230: 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62  s are detected b
5240: 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63  y individual opc
5250: 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d  odes, with an im
5260: 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a  mediate.    ** j
5270: 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75  umps to abort_du
5280: 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20  e_to_error. */. 
5290: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
52a0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20  QLITE_OK );..   
52b0: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f   assert( pOp>=aO
52c0: 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  p && pOp<&aOp[p-
52d0: 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56  >nOp]);.#ifdef V
52e0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
52f0: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48  start = sqlite3H
5300: 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a  wtime();.#endif.
5310: 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23      nVmStep++;.#
5320: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5330: 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
5340: 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61  TUS.    if( p->a
5350: 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65  nExec ) p->anExe
5360: 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29  c[(int)(pOp-aOp)
5370: 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ]++;.#endif..   
5380: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
5390: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
53a0: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
53b0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
53c0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
53d0: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
53e0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
53f0: 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ce ){.      sqli
5400: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
5410: 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70  tdout, (int)(pOp
5420: 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20   - aOp), pOp);. 
5430: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
5440: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
5450: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
5460: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
5470: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
5480: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
5490: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
54a0: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
54b0: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
54c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
54d0: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
54e0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
54f0: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
5500: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5510: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
5520: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
5530: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
5540: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
5550: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
5560: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
5570: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69  dif..    /* Sani
5580: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5590: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
55a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
55b0: 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20  EBUG.    {.     
55c0: 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d   u8 opProperty =
55d0: 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
55e0: 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f  operty[pOp->opco
55f0: 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28  de];.      if( (
5600: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5610: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5620: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5630: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
5640: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5650: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
5660: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
5670: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5680: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5690: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
56a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
56b0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
56c0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
56d0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
56e0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
56f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
5700: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
5710: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5720: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5730: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5740: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5750: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5760: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5770: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
5780: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5790: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
57a0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
57b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
57c0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
57d0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
57e0: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
57f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
5800: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5810: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5820: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
5830: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5840: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5850: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5860: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5870: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
5880: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5890: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
58a0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
58b0: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
58c0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
58d0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
58e0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
58f0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5900: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5910: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  s(&aMem[pOp->p3]
5920: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
5930: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5940: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5950: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
5960: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5970: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  rty & OPFLG_OUT2
5980: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5990: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
59a0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
59b0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
59c0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
59d0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
59e0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
59f0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5a00: 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
5a10: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5a20: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
5a30: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
5a40: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5a50: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5a60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5a70: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
5a80: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5a90: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5aa0: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5ab0: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p3]);.      }.
5ac0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66      }.#endif.#if
5ad0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5ae0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
5af0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
5b00: 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f      pOrigOp = pO
5b10: 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20  p;.#endif.  .   
5b20: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5b30: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5b40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5b90: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5ba0: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5bb0: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5bc0: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5bd0: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5be0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5bf0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5c00: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5c10: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5c20: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5c30: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5c40: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5c50: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5c60: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5c70: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5c80: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5c90: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5ca0: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5cb0: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5cc0: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5cd0: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5ce0: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5cf0: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5d00: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5d10: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5d20: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5d30: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5d40: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5d50: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5d60: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5d70: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5d80: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5d90: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5da0: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5db0: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5dc0: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5dd0: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5de0: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5df0: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5e00: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5e10: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5e20: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5e30: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5e40: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5e50: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5e60: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5e70: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5e80: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5e90: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5ea0: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5eb0: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5ec0: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5ed0: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5ee0: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5ef0: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5f00: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5f10: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5f20: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5f30: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5f40: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5f50: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5f60: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5f70: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5f80: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5f90: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5fa0: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5fb0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5fc0: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5fd0: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5fe0: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5ff0: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
6000: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
6010: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
6020: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
6030: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
6040: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
6050: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
6060: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
6070: 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33   in3, out2, out3
6080: 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b  .  See.** the mk
6090: 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69  opcodeh.awk scri
60a0: 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  pt for additiona
60b0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
60c0: 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69  *.** Documentati
60d0: 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70  on about VDBE op
60e0: 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74  codes is generat
60f0: 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  ed by scanning t
6100: 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20  his file.** for 
6110: 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f  lines of that co
6120: 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e  ntain "Opcode:".
6130: 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20    That line and 
6140: 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a  all subsequent.*
6150: 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20  * comment lines 
6160: 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  are used in the 
6170: 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68  generation of th
6180: 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f  e opcode.html do
6190: 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66  cumentation.** f
61a0: 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41  ile..**.** SUMMA
61b0: 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f  RY:.**.**     Fo
61c0: 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f  rmatting is impo
61d0: 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73  rtant to scripts
61e0: 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20   that scan this 
61f0: 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20  file..**     Do 
6200: 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d  not deviate from
6210: 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   the formatting 
6220: 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20  style currently 
6230: 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  in use..**.*****
6240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70  ********/../* Op
6290: 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32  code:  Goto * P2
62a0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20   * * *.**.** An 
62b0: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75  unconditional ju
62c0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
62d0: 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e  ..** The next in
62e0: 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74  struction execut
62f0: 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74  ed will be .** t
6300: 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20  he one at index 
6310: 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  P2 from the begi
6320: 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20  nning of.** the 
6330: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54  program..**.** T
6340: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20  he P1 parameter 
6350: 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  is not actually 
6360: 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
6370: 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ode.  However, i
6380: 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65  t.** is sometime
6390: 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65  s set to 1 inste
63a0: 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e  ad of 0 as a hin
63b0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  t to the command
63c0: 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74  -line shell.** t
63d0: 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73  hat this Goto is
63e0: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
63f0: 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74   loop and that t
6400: 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32  he lines from P2
6410: 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20   down.** to the 
6420: 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f  current line sho
6430: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
6440: 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
6450: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  ut..*/.case OP_G
6460: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
6470: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75     /* jump */.ju
6480: 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
6490: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
64a0: 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  :.  pOp = &aOp[p
64b0: 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20  Op->p2 - 1];..  
64c0: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
64d0: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
64e0: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
64f0: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
6500: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
6510: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
6520: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
6530: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
6540: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
6550: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
6560: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
6570: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
6580: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
6590: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
65a0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
65b0: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
65c0: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
65d0: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
65e0: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
65f0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6600: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6610: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6620: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
6630: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6640: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
6650: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
6660: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
6670: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
6680: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
6690: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
66a0: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
66b0: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
66c0: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
66d0: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
66e0: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
66f0: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6700: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6710: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6720: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
6730: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6740: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
6750: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
6760: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
6770: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
6780: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6790: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
67a0: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
67b0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
67c0: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
67d0: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
67e0: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
67f0: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6800: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
6810: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
6820: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
6830: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
6840: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
6850: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
6860: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6870: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6880: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6890: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
68a0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
68b0: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
68c0: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
68d0: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
68e0: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
68f0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
6900: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20  xProgress!=0 && 
6910: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
6920: 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 61  ssLimit ){.    a
6930: 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67  ssert( db->nProg
6940: 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20  ressOps!=0 );.  
6950: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
6960: 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d   = nVmStep + db-
6970: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
6980: 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72  (nVmStep%db->nPr
6990: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20  ogressOps);.    
69a0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
69b0: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
69c0: 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  rg) ){.      rc 
69d0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
69e0: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
69f0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
6a00: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  r;.    }.  }.#en
6a10: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6a20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
6a30: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
6a40: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
6a50: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
6a60: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
6a70: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
6a80: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
6a90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
6aa0: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
6ab0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
6ac0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6ad0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
6ae0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6af0: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
6b00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6b10: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6b20: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6b30: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
6b40: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
6b50: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6b60: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
6b70: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
6b80: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
6b90: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6ba0: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
6bb0: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
6bc0: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
6bd0: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
6be0: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
6bf0: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
6c00: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
6c10: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
6c20: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6c30: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6c40: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
6c50: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6c60: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
6c70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
6c80: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
6c90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
6ca0: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
6cb0: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
6cc0: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
6cd0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
6ce0: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
6cf0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
6d00: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6d10: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6d20: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6d30: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
6d40: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
6d50: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6d60: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6d70: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6d80: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
6d90: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
6da0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
6db0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
6dc0: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
6dd0: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
6de0: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
6df0: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
6e00: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
6e10: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6e20: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
6e30: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
6e40: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
6e50: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
6e60: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6e70: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
6e80: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
6e90: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
6ea0: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6eb0: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
6ec0: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
6ed0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6ee0: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
6ef0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
6f00: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
6f10: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6f20: 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32  p2>=0 && pOp->p2
6f30: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73  <p->nOp );.  ass
6f40: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
6f50: 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f  && pOp->p3<p->nO
6f60: 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p );.  pOut = &a
6f70: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6f80: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
6f90: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b  Dynamic(pOut) );
6fa0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
6fb0: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f  Op->p3 - 1;.  pO
6fc0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
6fd0: 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Int;.  if( pOp->
6fe0: 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  p2 ) goto jump_t
6ff0: 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
7000: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
7010: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
7020: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
7030: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
7040: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
7050: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59  gister P1 is a Y
7060: 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ield..** Jump to
7070: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
7080: 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e  r of that Yield.
7090: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
70a0: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
70b0: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
70c0: 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
70d0: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
70e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
70f0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
7100: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
7110: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
7120: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
7130: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7140: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
7150: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
7160: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
7170: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
7180: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
7190: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
71a0: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
71b0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
71c0: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
71d0: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
71e0: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
71f0: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
7200: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
7210: 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b  Caller->p2 - 1];
7220: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
7230: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
7240: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7250: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
7260: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7270: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
7280: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
7290: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
72a0: 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a  ter P1.  This.**
72b0: 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20   has the effect 
72c0: 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61  of yielding to a
72d0: 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a   coroutine..**.*
72e0: 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69  * If the corouti
72f0: 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63  ne that is launc
7300: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
7310: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
7320: 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65  h.** Yield or Re
7330: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
7340: 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  ue to the next i
7350: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
7360: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75   if.** the corou
7370: 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79  tine launched by
7380: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7390: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45  n ends with.** E
73a0: 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65  ndCoroutine, the
73b0: 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74  n jump to P2 rat
73c0: 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75  her than continu
73d0: 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ing with the.** 
73e0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
73f0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7400: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7410: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
7420: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
7430: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
7440: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
7450: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7460: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7470: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
7480: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  In1)==0 );.  pIn
7490: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
74a0: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
74b0: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
74c0: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e   pIn1->u.i = (in
74d0: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
74e0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
74f0: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
7500: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44    pOp = &aOp[pcD
7510: 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est];.  break;.}
7520: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
7530: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
7540: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
7550: 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e  psis: if r[P3]=n
7560: 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43  ull halt.**.** C
7570: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
7580: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
7590: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
75a0: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
75b0: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
75c0: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
75d0: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
75e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
75f0: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
7600: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
7610: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
7620: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
7630: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20  a no-op..** The 
7640: 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f  P5 parameter sho
7650: 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73  uld be 1..*/.cas
7660: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
7670: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
7680: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
7690: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
76a0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
76b0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62  MEM_Null)==0 ) b
76c0: 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
76d0: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
76e0: 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70  Halt */.}../* Op
76f0: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
7700: 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
7710: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
7720: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
7730: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
7740: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
7750: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
7760: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
7770: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
7780: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
7790: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
77a0: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
77b0: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
77c0: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
77d0: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
77e0: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
77f0: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
7800: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
7810: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
7820: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
7830: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
7840: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
7850: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
7860: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
7870: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
7880: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
7890: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
78a0: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
78b0: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
78c0: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
78d0: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
78e0: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
78f0: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
7900: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
7910: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
7920: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
7930: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
7940: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
7950: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
7960: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
7970: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
7980: 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61  **.** P5 is a va
7990: 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e  lue between 0 an
79a0: 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20  d 4, inclusive, 
79b0: 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68  that modifies th
79c0: 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  e P4 string..**.
79d0: 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68  **    0:  (no ch
79e0: 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20  ange).**    1:  
79f0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69  NOT NULL contrai
7a00: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7a10: 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63      2:  UNIQUE c
7a20: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7a30: 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43  : P4.**    3:  C
7a40: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
7a50: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7a60: 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59   4:  FOREIGN KEY
7a70: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7a80: 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20  ed: P4.**.** If 
7a90: 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P5 is not zero a
7aa0: 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74  nd P4 is NULL, t
7ab0: 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61  hen everything a
7ac0: 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a  fter the ":" is.
7ad0: 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a  ** omitted..**.*
7ae0: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
7af0: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
7b00: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
7b10: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
7b20: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
7b30: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
7b40: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
7b50: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
7b60: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
7b70: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
7b80: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
7b90: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
7ba0: 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d  lt: {.  VdbeFram
7bb0: 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74  e *pFrame;.  int
7bc0: 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28   pcx;..  pcx = (
7bd0: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
7be0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
7bf0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
7c00: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
7c10: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
7c20: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
7c30: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
7c40: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
7c50: 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
7c60: 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72  rame;.    p->pFr
7c70: 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50  ame = pFrame->pP
7c80: 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46  arent;.    p->nF
7c90: 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69  rame--;.    sqli
7ca0: 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
7cb0: 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
7cc0: 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c  );.    pcx = sql
7cd0: 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73  ite3VdbeFrameRes
7ce0: 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20  tore(pFrame);.  
7cf0: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
7d00: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
7d10: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7d20: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
7d30: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
7d40: 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72  pcx is the OP_Pr
7d50: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
7d60: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
7d70: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
7d80: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
7d90: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
7da0: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7db0: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
7dc0: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
7dd0: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
7de0: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
7df0: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
7e00: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
7e10: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
7e20: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
7e30: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
7e40: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
7e50: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
7e60: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
7e70: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
7e80: 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e  .      pcx = p->
7e90: 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20  aOp[pcx].p2-1;. 
7ea0: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7eb0: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7ec0: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
7ed0: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a  Op = &aOp[pcx];.
7ee0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
7ef0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
7f00: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7f10: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7f20: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b  ;.  p->pc = pcx;
7f30: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7f40: 70 35 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 35  p5>=0 && pOp->p5
7f50: 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  <=4 );.  if( p->
7f60: 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  rc ){.    if( pO
7f70: 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73  p->p5 ){.      s
7f80: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
7f90: 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b   * const azType[
7fa0: 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22  ] = { "NOT NULL"
7fb0: 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45  , "UNIQUE", "CHE
7fc0: 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CK",.           
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20    "FOREIGN KEY" 
8000: 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  };.      testcas
8010: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  e( pOp->p5==1 );
8020: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
8030: 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20   pOp->p5==2 );. 
8040: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8050: 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20  Op->p5==3 );.   
8060: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
8070: 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5==4 );.     
8080: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
8090: 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61  r(p, "%s constra
80a0: 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a 54  int failed", azT
80b0: 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b  ype[pOp->p5-1]);
80c0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
80d0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20 20  p4.z ){.        
80e0: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
80f0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
8100: 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72  "%z: %s", p->zEr
8110: 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  rMsg, pOp->p4.z)
8120: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
8130: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
8140: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
8150: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
8160: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8170: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
8180: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
8190: 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20  [%s]: %s", pcx, 
81a0: 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
81b0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Msg);.  }.  rc =
81c0: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
81d0: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
81e0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
81f0: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
8200: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
8210: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
8220: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
8230: 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49      p->rc = SQLI
8240: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
8250: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
8260: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
8270: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
8280: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29  ITE_CONSTRAINT )
8290: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
82a0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64  ==SQLITE_OK || d
82b0: 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
82c0: 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  >0 || db->nDefer
82d0: 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a  redImmCons>0 );.
82e0: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
82f0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
8300: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
8310: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
8320: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
8330: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
8340: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
8350: 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a  is: r[P2]=P1.**.
8360: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
8370: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
8380: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
8390: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
83a0: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
83b0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
83c0: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
83d0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
83e0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
83f0: 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62  i = pOp->p1;.  b
8400: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8410: 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a  de: Int64 * P2 *
8420: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
8430: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
8440: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
8450: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e  r to a 64-bit in
8460: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20  teger value..** 
8470: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
8480: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8490: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
84a0: 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20  t64: {          
84b0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f   /* out2 */.  pO
84c0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
84d0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
84e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
84f0: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
8500: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
8510: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
8520: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
8530: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
8540: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
8550: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
8560: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8570: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
8580: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
8590: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
85a0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
85b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
85c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
85d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
85e0: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
85f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8600: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f  K_FLOAT, out2 */
8610: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8620: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8630: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
8640: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
8650: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
8660: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
8670: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  al) );.  pOut->u
8680: 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  .r = *pOp->p4.pR
8690: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
86a0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
86b0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
86c0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
86d0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a  is: r[P2]='P4'.*
86e0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
86f0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
8700: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
8710: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
8720: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
8730: 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70  into a String op
8740: 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20 69  code before it i
8750: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
8760: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20  he first time.  
8770: 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74  During.** this t
8780: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  ransformation, t
8790: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72  he length of str
87a0: 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74  ing P4 is comput
87b0: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a  ed and stored.**
87c0: 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d   as the P1 param
87d0: 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eter..*/.case OP
87e0: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
87f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8800: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a  K_STRING, out2 *
8810: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
8820: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
8830: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8840: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8850: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
8860: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
8870: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
8880: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
8890: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
88a0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
88b0: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
88c0: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
88d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
88e0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
88f0: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
8900: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
8910: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61 73  _STATIC);.    as
8920: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8930: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
8940: 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20  E_TOOBIG );.    
8950: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
8960: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
8970: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
8980: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
8990: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
89a0: 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c  rt( pOut->szMall
89b0: 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d  oc>0 && pOut->zM
89c0: 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29  alloc==pOut->z )
89d0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56 64  ;.    assert( Vd
89e0: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
89f0: 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75  t)==0 );.    pOu
8a00: 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  t->szMalloc = 0;
8a10: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
8a20: 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a   |= MEM_Static;.
8a30: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
8a40: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
8a50: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
8a60: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
8a70: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
8a80: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
8a90: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
8aa0: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
8ab0: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
8ac0: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20  = pOut->n;.  }. 
8ad0: 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53   testcase( rc==S
8ae0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a  QLITE_TOOBIG );.
8af0: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
8b00: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
8b10: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
8b20: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
8b30: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
8b40: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
8b50: 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46 61  TE_OK );.  /* Fa
8b60: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
8b70: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
8b80: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
8b90: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
8ba0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
8bb0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8bc0: 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29  2]='P4' (len=P1)
8bd0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
8be0: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
8bf0: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
8c00: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
8c10: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
8c20: 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a 65 72  If P3 is not zer
8c30: 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  o and the conten
8c40: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
8c50: 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 35 2c   is equal to P5,
8c60: 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74   then.** the dat
8c70: 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65 67  atype of the reg
8c80: 69 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e 76  ister P2 is conv
8c90: 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20  erted to BLOB.  
8ca0: 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a  The content is.*
8cb0: 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71 75 65  * the same seque
8cc0: 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69 74  nce of bytes, it
8cd0: 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65 72   is merely inter
8ce0: 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f 42  preted as a BLOB
8cf0: 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61   instead.** of a
8d00: 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20 69   string, as if i
8d10: 74 20 68 61 64 20 62 65 65 6e 20 43 41 53 54 2e  t had been CAST.
8d20: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
8d30: 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21 3d  :.**.** if( P3!=
8d40: 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d 50  0 and reg[P3]==P
8d50: 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20 43  5 ) reg[P2] := C
8d60: 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73 20 42  AST(reg[P2] as B
8d70: 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  LOB).*/.case OP_
8d80: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8d90: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8da0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8db0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
8dc0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8dd0: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
8de0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
8df0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8e00: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
8e10: 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70  = pOp->p4.z;.  p
8e20: 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31  Out->n = pOp->p1
8e30: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
8e40: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
8e50: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8e60: 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  pOut);.#ifndef S
8e70: 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e  QLITE_LIKE_DOESN
8e80: 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20  T_MATCH_BLOBS.  
8e90: 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
8ea0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
8eb0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
8ec0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
8ed0: 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  ;.    pIn3 = &aM
8ee0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
8ef0: 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
8f00: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
8f10: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e  ;.    if( pIn3->
8f20: 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20 70  u.i==pOp->p5 ) p
8f30: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8f40: 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63  _Blob|MEM_Static
8f50: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23  |MEM_Term;.  }.#
8f60: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
8f70: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
8f80: 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  l P1 P2 P3 * *.*
8f90: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8fa0: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
8fb0: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
8fc0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
8fd0: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
8fe0: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
8ff0: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
9000: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9010: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
9020: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
9030: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
9040: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
9050: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
9060: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
9070: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
9080: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
9090: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
90a0: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
90b0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
90c0: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
90d0: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
90e0: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
90f0: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
9100: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
9110: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
9120: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
9130: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
9140: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
9150: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9160: 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20   */.  int cnt;. 
9170: 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20   u16 nullFlag;. 
9180: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
9190: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
91a0: 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d    cnt = pOp->p3-
91b0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
91c0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
91d0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
91e0: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  sor) );.  pOut->
91f0: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
9200: 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45   = pOp->p1 ? (ME
9210: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72  M_Null|MEM_Clear
9220: 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ed) : MEM_Null;.
9230: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20    pOut->n = 0;. 
9240: 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b   while( cnt>0 ){
9250: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
9260: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
9270: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
9280: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
9290: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
92a0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
92b0: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75  ullFlag;.    pOu
92c0: 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e  t->n = 0;.    cn
92d0: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
92e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
92f0: 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20  SoftNull P1 * * 
9300: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9310: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
9320: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
9330: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
9340: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
9350: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
9360: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
9370: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
9380: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
9390: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
93a0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
93b0: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
93c0: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
93d0: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
93e0: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
93f0: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
9400: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
9410: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
9420: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
9430: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
9440: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
9450: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
9460: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9470: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
9480: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
9490: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
94a0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
94b0: 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74  t->flags = (pOut
94c0: 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c  ->flags|MEM_Null
94d0: 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  )&~MEM_Undefined
94e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
94f0: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
9500: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
9510: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
9520: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
9530: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
9540: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
9550: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
9560: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
9570: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9580: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
9590: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
95a0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
95b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
95c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
95d0: 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  TH );.  pOut = o
95e0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
95f0: 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33   pOp);.  sqlite3
9600: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
9610: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
9620: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
9630: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
9640: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
9650: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9660: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9670: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
9680: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
9690: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
96a0: 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31  P2]=parameter(P1
96b0: 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  ,P4).**.** Trans
96c0: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
96d0: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
96e0: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
96f0: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
9700: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
9710: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
9720: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
9730: 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  P4..** The P4 va
9740: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
9750: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
9760: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
9770: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
9780: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
9790: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d  /* out2 */.  Mem
97a0: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
97b0: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
97c0: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61  nsferred */..  a
97d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
97e0: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
97f0: 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nVar );.  assert
9800: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
9810: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e  | pOp->p4.z==p->
9820: 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d  azVar[pOp->p1-1]
9830: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
9840: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
9850: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
9860: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
9870: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
9880: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9890: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
98a0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
98b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
98c0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
98d0: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
98e0: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
98f0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9900: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9910: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
9920: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9930: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d  opsis: r[P2@P3]=
9940: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
9950: 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65  ove the P3 value
9960: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
9970: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
9980: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
9990: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
99a0: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
99b0: 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P3-1 are.** left
99c0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
99d0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
99e0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
99f0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
9a00: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
9a10: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20  3-1 to overlap. 
9a20: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a   It is an error.
9a30: 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20  ** for P3 to be 
9a40: 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a  less than 1..*/.
9a50: 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a  case OP_Move: {.
9a60: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
9a70: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9a80: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
9a90: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
9aa0: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
9ab0: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
9ac0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
9ad0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
9ae0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
9af0: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
9b00: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
9b10: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
9b20: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
9b30: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
9b40: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
9b50: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
9b60: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
9b70: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
9b80: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
9b90: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
9ba0: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
9bb0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9bc0: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9bd0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
9be0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
9bf0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
9c00: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
9c10: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
9c20: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9c30: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9c40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9c50: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
9c60: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
9c70: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
9c80: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9c90: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
9ca0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9cb0: 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70  <pOut ){.      p
9cc0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9cd0: 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b  += pOp->p2 - p1;
9ce0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
9cf0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9d00: 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49  (pOut);.    REGI
9d10: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
9d20: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
9d30: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9d40: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9d50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9d60: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
9d70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9d80: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
9d90: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
9da0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
9db0: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
9dc0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9dd0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
9de0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9df0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
9e00: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
9e10: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
9e20: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
9e30: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9e40: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9e50: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9e60: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
9e70: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
9e80: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9e90: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9ea0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9eb0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9ec0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9ed0: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
9ee0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
9ef0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9f00: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9f10: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
9f20: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9f30: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9f40: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9f50: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9f60: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
9f70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9f80: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
9f90: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
9fa0: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
9fb0: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
9fc0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9fd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9fe0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
9ff0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
a000: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
a010: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
a020: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
a030: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a040: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a050: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
a060: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
a070: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
a080: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
a090: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
a0a0: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
a0b0: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
a0c0: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
a0d0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
a0e0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
a0f0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
a100: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
a110: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
a120: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
a130: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
a140: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
a150: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
a160: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
a170: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
a180: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
a190: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
a1a0: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
a1b0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
a1c0: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
a1d0: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
a1e0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
a1f0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
a200: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a210: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a220: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a230: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a240: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
a250: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
a260: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
a270: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
a280: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
a290: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
a2a0: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
a2b0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
a2c0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a2d0: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
a2e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a2f0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
a300: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a310: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
a320: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
a330: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
a340: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
a350: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a360: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a370: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
a380: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
a390: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
a3a0: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
a3b0: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
a3c0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
a3d0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a3e0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a3f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a400: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
a410: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
a420: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
a430: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a440: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
a450: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
a460: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
a470: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a480: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
a490: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a4a0: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
a4b0: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
a4c0: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
a4d0: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
a4e0: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
a4f0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
a500: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
a510: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
a520: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
a530: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
a540: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
a550: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
a560: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
a570: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
a580: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
a590: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
a5a0: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
a5b0: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
a5c0: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
a5d0: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
a5e0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
a5f0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
a600: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
a610: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
a620: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a630: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a640: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a650: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a660: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
a670: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
a680: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
a690: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
a6a0: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
a6b0: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
a6c0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
a6d0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
a6e0: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
a6f0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
a700: 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26  ogressLimit.   &
a710: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  & db->xProgress(
a720: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
a730: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63  )!=0.  ){.    rc
a740: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
a750: 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  UPT;.    goto ab
a760: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
a770: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
a780: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
a790: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
a7a0: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
a7b0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a7c0: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
a7d0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a7e0: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
a7f0: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
a800: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
a810: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
a820: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
a830: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
a840: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
a850: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
a860: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
a870: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
a880: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
a890: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
a8a0: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
a8b0: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
a8c0: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  rnal );.    goto
a8d0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
a8e0: 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  ror;.  }..  /* I
a8f0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
a900: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
a910: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
a920: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
a930: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
a940: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
a950: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
a960: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a970: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
a980: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
a990: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
a9a0: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
a9b0: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
a9c0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a9d0: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
a9e0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
a9f0: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
aa00: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
aa10: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
aa20: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
aa30: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
aa40: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
aa50: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
aa60: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
aa70: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
aa80: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
aa90: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
aaa0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
aab0: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
aac0: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
aad0: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
aae0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
aaf0: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
ab00: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
ab10: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
ab20: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
ab30: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
ab40: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
ab50: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
ab60: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
ab70: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
ab80: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
ab90: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
aba0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
abb0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
abc0: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
abd0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
abe0: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
abf0: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
ac00: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
ac10: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
ac20: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
ac30: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
ac40: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
ac50: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
ac60: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
ac70: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
ac80: 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28  EASE);.  assert(
ac90: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
aca0: 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  ;..  /* Invalida
acb0: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
acc0: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
acd0: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
ace0: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
acf0: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
ad00: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
ad10: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
ad20: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
ad30: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
ad40: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
ad50: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
ad60: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
ad70: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
ad80: 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65  as.  ** a side e
ad90: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
ada0: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
adb0: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
adc0: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
add0: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
ade0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
adf0: 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d  IsValid(&pMem[i]
ae00: 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  ) );.    Deephem
ae10: 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d  eralize(&pMem[i]
ae20: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
ae30: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
ae40: 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20  MEM_Ephem)==0.  
ae50: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d            || (pM
ae60: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d  em[i].flags & (M
ae70: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
ae80: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )==0 );.    sqli
ae90: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
aea0: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
aeb0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
aec0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
aed0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
aee0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
aef0: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
af00: 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e  mem;..  if( db->
af10: 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f  mTrace & SQLITE_
af20: 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20  TRACE_ROW ){.   
af30: 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49   db->xTrace(SQLI
af40: 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62  TE_TRACE_ROW, db
af50: 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20  ->pTraceArg, p, 
af60: 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  0);.  }..  /* Re
af70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a  turn SQLITE_ROW.
af80: 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28    */.  p->pc = (
af90: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20  int)(pOp - aOp) 
afa0: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
afb0: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
afc0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
afd0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
afe0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
aff0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
b000: 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]+r[P1].**.
b010: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
b020: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
b030: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
b040: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
b050: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
b060: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b070: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b080: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
b090: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
b0a0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
b0b0: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
b0c0: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
b0d0: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
b0e0: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
b0f0: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
b100: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
b110: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
b120: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
b130: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
b140: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
b150: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
b160: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
b170: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
b180: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
b190: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
b1a0: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
b1b0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
b1c0: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
b1d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
b1e0: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
b1f0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
b200: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
b210: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
b220: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
b230: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
b240: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
b250: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
b260: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
b270: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
b280: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
b290: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
b2a0: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
b2b0: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
b2c0: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
b2d0: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
b2e0: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
b2f0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
b300: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
b310: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
b320: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
b330: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
b340: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
b350: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b360: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
b370: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
b380: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
b390: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
b3a0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
b3b0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
b3c0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
b3d0: 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  ;.  if( pOut!=pI
b3e0: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
b3f0: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
b400: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
b410: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
b420: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
b430: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
b440: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
b450: 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  =0;.  pOut->z[nB
b460: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
b470: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
b480: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
b490: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
b4a0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
b4b0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
b4c0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
b4d0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b4e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
b4f0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b500: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b510: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
b520: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
b530: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
b540: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b550: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b560: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b570: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b580: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b590: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b5a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b5b0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b5c0: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
b5d0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b5e0: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72  s: r[P3]=r[P1]*r
b5f0: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75  [P2].**.**.** Mu
b600: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
b610: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b620: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b630: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b640: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b650: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b660: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b670: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b680: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b690: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b6a0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
b6b0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b6c0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b6d0: 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62  -r[P1].**.** Sub
b6e0: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
b6f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
b700: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
b710: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b720: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b730: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b740: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b750: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b760: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b770: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b780: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
b790: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b7a0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  is: r[P3]=r[P2]/
b7b0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b7c0: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b7d0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b7e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b7f0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b800: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b810: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b820: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b830: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b840: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b850: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b860: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b870: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b880: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b890: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b8a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b8b0: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b8c0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b8d0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31  r[P3]=r[P2]%r[P1
b8e0: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ].**.** Compute 
b8f0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
b900: 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69  ter integer regi
b910: 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64  ster P2 is divid
b920: 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74  ed by .** regist
b930: 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20  er P1 and store 
b940: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b950: 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49  gister P3. .** I
b960: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
b970: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b980: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
b990: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
b9a0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
b9b0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b9c0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b9d0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b9e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b9f0: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
ba00: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ba10: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
ba20: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
ba30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
ba40: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
ba50: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
ba60: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
ba70: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ba80: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
ba90: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
baa0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
bab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bac0: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
bad0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
bae0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
baf0: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
bb00: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
bb10: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
bb20: 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e  t3 */.  char bIn
bb30: 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74  tint;   /* Start
bb40: 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e  ed out as two in
bb50: 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  teger operands *
bb60: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
bb70: 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20      /* Combined 
bb80: 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d  MEM_* flags from
bb90: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a   both inputs */.
bba0: 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20    u16 type1;    
bbb0: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
bbc0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
bbd0: 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32  d */.  u16 type2
bbe0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
bbf0: 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20  c type of right 
bc00: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
bc10: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
bc20: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
bc30: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
bc40: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
bc50: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
bc60: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
bc70: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
bc80: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
bc90: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
bca0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
bcb0: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
bcc0: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
bcd0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
bce0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
bcf0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31  Op->p1];.  type1
bd00: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
bd10: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
bd20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
bd30: 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63   type2 = numeric
bd40: 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f  Type(pIn2);.  pO
bd50: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
bd60: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
bd70: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
bd80: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
bd90: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
bda0: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
bdb0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
bdc0: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74  s_null;.  if( (t
bdd0: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
bde0: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
bdf0: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
be00: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
be10: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
be20: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
be30: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
be40: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
be50: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
be60: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
be70: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
be80: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
be90: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
bea0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
beb0: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
bec0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
bed0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bee0: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bef0: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
bf00: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
bf10: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
bf20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bf30: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
bf40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bf50: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bf60: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bf70: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bf80: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
bf90: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
bfa0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
bfb0: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
bfc0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
bfd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
bfe0: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
bff0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
c000: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c010: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c020: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c030: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c040: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
c050: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c060: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
c070: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
c080: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c090: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
c0a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74   }else{.    bInt
c0b0: 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68  int = 0;.fp_math
c0c0: 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74  :.    rA = sqlit
c0d0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
c0e0: 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20  pIn1);.    rB = 
c0f0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
c100: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
c110: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
c120: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
c130: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
c140: 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20    rB += rA;     
c150: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c160: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
c170: 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20      rB -= rA;   
c180: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c190: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
c1a0: 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20  y:    rB *= rA; 
c1b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c1c0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
c1d0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e: {.        /* 
c1e0: 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73  (double)0 In cas
c1f0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e of SQLITE_OMIT
c200: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e  _FLOATING_POINT.
c210: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  .. */.        if
c220: 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20  ( rA==(double)0 
c230: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c240: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c250: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20  ;.        rB /= 
c260: 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  rA;.        brea
c270: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
c280: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
c290: 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41      iA = (i64)rA
c2a0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28  ;.        iB = (
c2b0: 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20  i64)rB;.        
c2c0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
c2d0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c2e0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c2f0: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c300: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c310: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
c320: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
c330: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c340: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
c350: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
c360: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
c370: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
c380: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c390: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
c3a0: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
c3b0: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
c3c0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
c3d0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c3e0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
c3f0: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
c400: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c410: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
c420: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74  al);.    if( ((t
c430: 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f  ype1|type2)&MEM_
c440: 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e  Real)==0 && !bIn
c450: 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  tint ){.      sq
c460: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
c470: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
c480: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
c490: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
c4a0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c4b0: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
c4c0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
c4d0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
c4e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
c4f0: 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a  Seq P1 * * P4.**
c500: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
c510: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
c520: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
c530: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
c540: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
c550: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
c560: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
c570: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
c580: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
c590: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
c5a0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
c5b0: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
c5c0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
c5d0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
c5e0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
c5f0: 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
c600: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
c610: 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
c620: 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d  t a subsequent m
c630: 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29  in() or.** max()
c640: 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20   aggregate will 
c650: 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20  set to 1 if the 
c660: 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e  current row is n
c670: 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ot the minimum o
c680: 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54  r.** maximum.  T
c690: 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69  he P1 register i
c6a0: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
c6b0: 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72   0 by this instr
c6c0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
c6d0: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
c6e0: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
c6f0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
c700: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
c710: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
c720: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
c730: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
c740: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
c750: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
c760: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f  .** publicly.  O
c770: 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  nly built-in fun
c780: 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65  ctions have acce
c790: 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75  ss to this featu
c7a0: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  re..*/.case OP_C
c7b0: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
c7c0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c7d0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
c7e0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
c7f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c800: 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
c810: 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20  [pOp->p1], 0);. 
c820: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
c830: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
c840: 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34 20  on0 P1 P2 P3 P4 
c850: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
c860: 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40  r[P3]=func(r[P2@
c870: 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  P5]).**.** Invok
c880: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
c890: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
c8a0: 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20  er to a FuncDef 
c8b0: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 64  object that.** d
c8c0: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
c8d0: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
c8e0: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
c8f0: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
c900: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
c910: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
c920: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
c930: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
c940: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
c950: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
c960: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
c970: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
c980: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
c990: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
c9a0: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
c9b0: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
c9c0: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
c9d0: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
c9e0: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
c9f0: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
ca00: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
ca10: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
ca20: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
ca30: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
ca40: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
ca50: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
ca60: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
ca70: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
ca80: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
ca90: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
caa0: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
cab0: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
cac0: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
cad0: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
cae0: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
caf0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
cb00: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
cb10: 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e  e also: Function
cb20: 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46 69  , AggStep, AggFi
cb30: 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  nal.*/./* Opcode
cb40: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
cb50: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
cb60: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e  opsis: r[P3]=fun
cb70: 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  c(r[P2@P5]).**.*
cb80: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
cb90: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
cba0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
cbb0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cbc0: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 63  object that.** c
cbd0: 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
cbe0: 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  r to the functio
cbf0: 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69 74  n to be run) wit
cc00: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
cc10: 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65 67  aken.** from reg
cc20: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75 63  ister P2 and suc
cc30: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
cc40: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
cc50: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a 2a  tion is stored.*
cc60: 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  * in register P3
cc70: 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  .  Register P3 m
cc80: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
cc90: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
cca0: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
ccb0: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
ccc0: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
ccd0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
cce0: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
ccf0: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
cd00: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
cd10: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
cd20: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
cd30: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
cd40: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
cd50: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
cd60: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
cd70: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
cd80: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
cd90: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
cda0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
cdb0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
cdc0: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
cdd0: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
cde0: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
cdf0: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
ce00: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
ce10: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
ce20: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
ce30: 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  .**.** SQL funct
ce40: 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61 6c  ions are initial
ce50: 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 46  ly coded as OP_F
ce60: 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50 34  unction0 with P4
ce70: 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20   pointing.** to 
ce80: 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  a FuncDef object
ce90: 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74 20  .  But on first 
cea0: 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65 20  evaluation, the 
ceb0: 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a 2a  P4 operand is.**
cec0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
ced0: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
cee0: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
cef0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20   object and the 
cf00: 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68 61  operation.** cha
cf10: 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50 5f  nged to this OP_
cf20: 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65 2e  Function opcode.
cf30: 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
cf40: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
cf50: 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c 69  n of.** the sqli
cf60: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
cf70: 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20 6f  ct occurs only o
cf80: 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61 6e  nce, rather than
cf90: 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 2a   once for each.*
cfa0: 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  * evaluation of 
cfb0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
cfc0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75  .** See also: Fu
cfd0: 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65 70  nction0, AggStep
cfe0: 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  , AggFinal.*/.ca
cff0: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 3a  se OP_Function0:
d000: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71   {.  int n;.  sq
d010: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
d020: 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
d030: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d040: 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d  FUNCDEF );.  n =
d050: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
d060: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
d070: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
d080: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
d090: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
d0a0: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
d0b0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
d0c0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
d0d0: 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
d0e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d0f0: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
d100: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
d110: 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69  );.  pCtx = sqli
d120: 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
d130: 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74  (db, sizeof(*pCt
d140: 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f  x) + (n-1)*sizeo
d150: 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  f(sqlite3_value*
d160: 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d  ));.  if( pCtx==
d170: 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
d180: 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
d190: 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63  0;.  pCtx->pFunc
d1a0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
d1b0: 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20  ;.  pCtx->iOp = 
d1c0: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
d1d0: 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20  ;.  pCtx->pVdbe 
d1e0: 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67  = p;.  pCtx->arg
d1f0: 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34  c = n;.  pOp->p4
d200: 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54  type = P4_FUNCCT
d210: 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74  X;.  pOp->p4.pCt
d220: 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d  x = pCtx;.  pOp-
d230: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75 6e  >opcode = OP_Fun
d240: 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c 6c  ction;.  /* Fall
d250: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
d260: 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a 63  _Function */.}.c
d270: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
d280: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71   {.  int i;.  sq
d290: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
d2a0: 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
d2b0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d2c0: 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74  FUNCCTX );.  pCt
d2d0: 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  x = pOp->p4.pCtx
d2e0: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
d2f0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69  function is insi
d300: 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  de of a trigger,
d310: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
d320: 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20  ray in aMem[].  
d330: 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ** might change 
d340: 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74  from one evaluat
d350: 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ion to the next.
d360: 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
d370: 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68   of code.  ** ch
d380: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
d390: 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
d3a0: 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61  y has changed, a
d3b0: 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a  nd if so it.  **
d3c0: 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74   reinitializes t
d3d0: 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74  he relavant part
d3e0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
d3f0: 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
d400: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  */.  pOut = &aMe
d410: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
d420: 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d 20  ( pCtx->pOut != 
d430: 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74 78  pOut ){.    pCtx
d440: 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 20  ->pOut = pOut;. 
d450: 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61     for(i=pCtx->a
d460: 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d  rgc-1; i>=0; i--
d470: 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20  ) pCtx->argv[i] 
d480: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b  = &aMem[pOp->p2+
d490: 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41 62  i];.  }..  memAb
d4a0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
d4b0: 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66 64  Ctx->pOut);.#ifd
d4c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
d4d0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74    for(i=0; i<pCt
d4e0: 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20  x->argc; i++){. 
d4f0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
d500: 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76  Valid(pCtx->argv
d510: 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  [i]) );.    REGI
d520: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
d530: 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76  p2+i, pCtx->argv
d540: 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  [i]);.  }.#endif
d550: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
d560: 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d 45  g(pCtx->pOut, ME
d570: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d  M_Null);.  pCtx-
d580: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  >fErrorOrAux = 0
d590: 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  ;.  db->lastRowi
d5a0: 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
d5b0: 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e   (*pCtx->pFunc->
d5c0: 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70 43  xSFunc)(pCtx, pC
d5d0: 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e  tx->argc, pCtx->
d5e0: 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52 2d  argv);/* IMP: R-
d5f0: 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
d600: 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d   lastRowid = db-
d610: 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20  >lastRowid;  /* 
d620: 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63  Remember rowid c
d630: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78  hanges made by x
d640: 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49  SFunc */..  /* I
d650: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
d660: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
d670: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
d680: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43  tion */.  if( pC
d690: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
d6a0: 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
d6b0: 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
d6c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
d6d0: 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
d6e0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
d6f0: 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20  Ctx->pOut));.   
d700: 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
d710: 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
d720: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
d730: 74 65 41 75 78 44 61 74 61 28 64 62 2c 20 26 70  teAuxData(db, &p
d740: 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74 78  ->pAuxData, pCtx
d750: 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29 3b  ->iOp, pOp->p1);
d760: 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
d770: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
d780: 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
d790: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
d7a0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
d7b0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
d7c0: 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74 2d  3 */.  if( pOut-
d7d0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
d7e0: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20  r|MEM_Blob) ){. 
d7f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
d800: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43 74  angeEncoding(pCt
d810: 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  x->pOut, encodin
d820: 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  g);.    if( sqli
d830: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
d840: 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20 67  (pCtx->pOut) ) g
d850: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
d860: 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ..  REGISTER_TRA
d870: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74 78  CE(pOp->p3, pCtx
d880: 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  ->pOut);.  UPDAT
d890: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
d8a0: 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62 72  Ctx->pOut);.  br
d8b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d8c0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
d8d0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
d8e0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  is: r[P3]=r[P1]&
d8f0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
d900: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
d910: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
d920: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d930: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
d940: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d950: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d960: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d970: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d980: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d990: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
d9a0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
d9b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
d9c0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
d9d0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
d9e0: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
d9f0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
da00: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
da10: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
da20: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
da30: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
da40: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
da50: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
da60: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
da70: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
da80: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
da90: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
daa0: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
dab0: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
dac0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
dad0: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
dae0: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
daf0: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
db00: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
db10: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
db20: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
db30: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
db40: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
db50: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
db60: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
db70: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
db80: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
db90: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
dba0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
dbb0: 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a  ]=r[P2]>>r[P1].*
dbc0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
dbd0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
dbe0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
dbf0: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
dc00: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
dc10: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
dc20: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
dc30: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
dc40: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
dc50: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
dc60: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
dc70: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
dc80: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
dc90: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
dca0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dcb0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dcc0: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
dcd0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
dce0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
dcf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dd00: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
dd10: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
dd20: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
dd30: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
dd40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
dd50: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
dd60: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
dd70: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
dd80: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dd90: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
dda0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ddb0: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
ddc0: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
ddd0: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
dde0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ddf0: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
de00: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
de10: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
de20: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
de30: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
de40: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
de50: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
de60: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
de70: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
de80: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
de90: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
dea0: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
deb0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
dec0: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
ded0: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
dee0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
def0: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
df00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
df10: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
df20: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
df30: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
df40: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
df50: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
df60: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
df70: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
df80: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
df90: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
dfa0: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
dfb0: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
dfc0: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
dfd0: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
dfe0: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
dff0: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
e000: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
e010: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
e020: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
e030: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
e040: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
e050: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
e060: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
e070: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
e080: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
e090: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
e0a0: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
e0b0: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
e0c0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
e0d0: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
e0e0: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
e0f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
e100: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
e110: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
e120: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
e130: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
e140: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
e150: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
e160: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
e170: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
e180: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
e190: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
e1a0: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
e1b0: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
e1c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
e1d0: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
e1e0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e1f0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
e200: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e210: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
e220: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
e230: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50  opsis: r[P1]=r[P
e240: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
e250: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
e260: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
e270: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
e280: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
e290: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
e2a0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
e2b0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
e2c0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
e2d0: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
e2e0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
e300: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
e310: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e320: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
e330: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
e340: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
e350: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
e360: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
e370: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
e380: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
e390: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
e3a0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
e3b0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e3c0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
e3d0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
e3e0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
e3f0: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
e400: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
e410: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
e420: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
e430: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
e440: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
e450: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
e460: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
e470: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
e480: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
e490: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
e4a0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
e4b0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
e4c0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e4d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e4e0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e4f0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e500: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
e510: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
e520: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
e530: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
e540: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
e550: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
e560: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
e570: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e580: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e590: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e5a0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
e5b0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
e5c0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
e5d0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e5e0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
e5f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
e600: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
e610: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
e620: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e630: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
e640: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
e650: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
e660: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
e670: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
e680: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
e690: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
e6a0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
e6b0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
e6c0: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
e6d0: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
e6e0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
e6f0: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
e700: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
e710: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
e720: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
e730: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
e740: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
e750: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
e760: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
e770: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
e780: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
e790: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
e7a0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
e7b0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
e7c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
e7d0: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e7f0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e800: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e810: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e820: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
e830: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
e840: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
e850: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e860: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
e870: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e880: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
e890: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e8a0: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
e8b0: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
e8c0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e8d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e8e0: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
e8f0: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
e900: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20  .** <ul>.** <li 
e910: 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54  value="97"> TEXT
e920: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39  .** <li value="9
e930: 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20  8"> BLOB.** <li 
e940: 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45  value="99"> NUME
e950: 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  RIC.** <li value
e960: 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a  ="100"> INTEGER.
e970: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
e980: 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  1"> REAL.** </ul
e990: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
e9a0: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
e9b0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
e9c0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
e9d0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
e9e0: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
e9f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
ea00: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
ea10: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
ea20: 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e  FF_BLOB && pOp->
ea30: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
ea40: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
ea50: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
ea60: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
ea70: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
ea80: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2==SQLITE_AFF_B
ea90: 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73  LOB );.  testcas
eaa0: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
eab0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
eac0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
ead0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
eae0: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
eaf0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
eb00: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
eb10: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
eb20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
eb30: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
eb40: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
eb50: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
eb60: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
eb70: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
eb80: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
eb90: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
eba0: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
ebb0: 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
ebc0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
ebd0: 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
ebe0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ebf0: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
ec00: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
ec10: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
ec20: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
ec30: 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ==r[P1].**.** Co
ec40: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
ec50: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ec60: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
ec70: 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74 68 65  P3)==reg(P1) the
ec80: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
ec90: 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20  ress P2.  Or if 
eca0: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
ecb0: 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  P2 flag is set i
ecc0: 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74  n P5, then.** st
ecd0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ore the result o
ece0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20  f comparison in 
ecf0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
ed00: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
ed10: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
ed20: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
ed30: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
ed40: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
ed50: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
ed60: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
ed70: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
ed80: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
ed90: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
eda0: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
edb0: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
edc0: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
edd0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
ede0: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
edf0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
ee00: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
ee10: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
ee20: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
ee30: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
ee40: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
ee50: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
ee60: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
ee70: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
ee80: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
ee90: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
eea0: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
eeb0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
eec0: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
eed0: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
eee0: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
eef0: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
ef00: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
ef10: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
ef20: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
ef30: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
ef40: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
ef50: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
ef60: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
ef70: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
ef80: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
ef90: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
efa0: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
efb0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
efc0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
efd0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
efe0: 20 50 34 20 69 73 20 75 73 65 64 20 74 6f 20 64   P4 is used to d
eff0: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
f000: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
f010: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f020: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f030: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f040: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f050: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f060: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f070: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f080: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f090: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f0a0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f0b0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f0c0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f0d0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f0e0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f0f0: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f100: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f110: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
f120: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f130: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
f140: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
f150: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
f160: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
f170: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
f180: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
f190: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
f1a0: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
f1b0: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
f1c0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
f1d0: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
f1e0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f1f0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
f200: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
f210: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f220: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
f230: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
f240: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
f250: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
f260: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
f270: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
f280: 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51  **.** If both SQ
f290: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64  LITE_STOREP2 and
f2a0: 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
f2b0: 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74   flags are set t
f2c0: 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65  hen the.** conte
f2d0: 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f  nt of r[P2] is o
f2e0: 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
f2f0: 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
f300: 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73 65  NULL or 0 (false
f310: 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  )..** In other w
f320: 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b  ords, a prior r[
f330: 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e  P2] value will n
f340: 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ot be overwritte
f350: 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e 0a 2a  n by 1 (true)..*
f360: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
f370: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f380: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
f390: 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]!=r[P1].**.*
f3a0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
f3b0: 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70  t like the Eq op
f3c0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
f3d0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
f3e0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
f3f0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
f400: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
f410: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
f420: 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 66   the Eq opcode f
f430: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
f440: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
f450: 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49  .** If both SQLI
f460: 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53  TE_STOREP2 and S
f470: 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66  QLITE_KEEPNULL f
f480: 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65  lags are set the
f490: 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  n the.** content
f4a0: 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c   of r[P2] is onl
f4b0: 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65  y changed if the
f4c0: 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55   new value is NU
f4d0: 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29 2e 0a  LL or 1 (true)..
f4e0: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
f4f0: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
f500: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
f510: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
f520: 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a  y 0 (false)..*/.
f530: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
f540: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
f550: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
f560: 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  3]<r[P1].**.** C
f570: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
f580: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
f590: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
f5a0: 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65  (P3)<reg(P1) the
f5b0: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
f5c0: 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20  ress P2.  Or if 
f5d0: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
f5e0: 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  P2 flag is set i
f5f0: 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68  n P5 store.** th
f600: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
f610: 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f  arison (0 or 1 o
f620: 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67  r NULL) into reg
f630: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
f640: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
f650: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
f660: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
f670: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
f680: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
f690: 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61 6b 65  LL then the take
f6a0: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
f6b0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
f6c0: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
f6d0: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
f6e0: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
f6f0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f700: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
f710: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
f720: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
f730: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
f740: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
f750: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
f760: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
f770: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
f780: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
f790: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
f7a0: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
f7b0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
f7c0: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
f7d0: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
f7e0: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
f7f0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
f800: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
f810: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
f820: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
f830: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
f840: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
f850: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
f860: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
f870: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
f880: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
f890: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
f8a0: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
f8b0: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
f8c0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
f8d0: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
f8e0: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
f8f0: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
f900: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
f910: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
f920: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
f930: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
f940: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
f950: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
f960: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
f970: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
f980: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
f990: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
f9a0: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
f9b0: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
f9c0: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
f9d0: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
f9e0: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
f9f0: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
fa00: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
fa10: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
fa20: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
fa30: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
fa40: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
fa50: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
fa60: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
fa70: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
fa80: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
fa90: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
faa0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
fab0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
fac0: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
fad0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
fae0: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
faf0: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
fb00: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
fb10: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
fb20: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
fb30: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
fb40: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
fb50: 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]<=r[P1].**.*
fb60: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
fb70: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
fb80: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
fb90: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
fba0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
fbb0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
fbc0: 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P3 is less than
fbd0: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
fbe0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
fbf0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
fc00: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
fc10: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
fc20: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
fc30: 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50   Opcode: Gt P1 P
fc40: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
fc50: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
fc60: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  >r[P1].**.** Thi
fc70: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
fc80: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
fc90: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
fca0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
fcb0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
fcc0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
fcd0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
fce0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
fcf0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
fd00: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
fd10: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
fd20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
fd30: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31  /* Opcode: Ge P1
fd40: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
fd50: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
fd60: 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]>=r[P1].**.** 
fd70: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
fd80: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
fd90: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
fda0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
fdb0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
fdc0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
fdd0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
fde0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
fdf0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
fe00: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
fe10: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
fe20: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
fe30: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
fe40: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
fe50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fe60: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
fe70: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
fe80: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
fe90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fea0: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
feb0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
fec0: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
fed0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fee0: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
fef0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ff00: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
ff10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ff20: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
ff30: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
ff40: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
ff50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
ff60: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
ff70: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
ff80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
ff90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
ffa0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ffb0: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20 72 65  */.  int res, re
ffc0: 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75  s2;      /* Resu
ffd0: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
ffe0: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
fff0: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
10000 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
10010 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
10020 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
10030 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
10040 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
10050 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
10060 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
10070 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
10080 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
10090 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
100a0 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
100b0 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
100c0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
100d0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
100e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
100f0 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
10100 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
10110 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
10120 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
10130 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs3)&MEM_Null ){
10140 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62  .    /* One or b
10150 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
10160 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28   NULL */.    if(
10170 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10180 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20  E_NULLEQ ){.    
10190 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e    /* If SQLITE_N
101a0 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68  ULLEQ is set (wh
101b0 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61  ich will only ha
101c0 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  ppen if the oper
101d0 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a  ator is.      **
101e0 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29   OP_Eq or OP_Ne)
101f0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
10200 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ump or not depen
10210 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
10220 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20        ** or not 
10230 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
10240 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  e null..      */
10250 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
10260 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10270 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  q || pOp->opcode
10280 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
10290 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31   assert( (flags1
102a0 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d   & MEM_Cleared)=
102b0 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
102c0 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  rt( (pOp->p5 & S
102d0 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
102e0 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
102f0 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75  ( (flags1&MEM_Nu
10300 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
10310 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c   (flags3&MEM_Nul
10320 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
10330 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
10340 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
10350 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
10360 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61  ;  /* Operands a
10370 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
10380 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
10390 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70   res = 1;  /* Op
103a0 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
103b0 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  qual */.      }.
103c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
103d0 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   /* SQLITE_NULLE
103e0 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61  Q is clear and a
103f0 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72  t least one oper
10400 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20  and is NULL,.   
10410 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72     ** then the r
10420 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
10430 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54  NULL..      ** T
10440 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
10450 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
10460 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
10470 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   set..      */. 
10480 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
10490 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
104a0 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
104b0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
104c0 32 5d 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d  2];.        iCom
104d0 70 61 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20  pare = 1;    /* 
104e0 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74  Operands are not
104f0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
10500 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
10510 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
10520 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
10530 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
10540 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ll);.        REG
10550 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
10560 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
10570 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
10580 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10590 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69  (2,3);.        i
105a0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
105b0 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29  ITE_JUMPIFNULL )
105c0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
105d0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
105e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
105f0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10600 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
10610 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
10620 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
10630 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
10640 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
10650 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
10660 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
10670 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
10680 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
10690 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  {.      if( (fla
106a0 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
106b0 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
106c0 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28   if( (flags1 & (
106d0 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
106e0 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
106f0 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Str ){.         
10700 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
10710 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20  inity(pIn1,0);. 
10720 20 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73           testcas
10730 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d  e( flags3!=pIn3-
10740 3e 66 6c 61 67 73 20 29 3b 20 2f 2a 20 50 6f 73  >flags ); /* Pos
10750 73 69 62 6c 65 20 69 66 20 70 49 6e 31 3d 3d 70  sible if pIn1==p
10760 49 6e 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  In3 */.         
10770 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
10780 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d  flags;.        }
10790 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66 6c  .        if( (fl
107a0 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags3 & (MEM_Int|
107b0 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
107c0 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
107d0 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75           applyNu
107e0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
107f0 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  n3,0);.        }
10800 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
10810 2a 20 48 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  * Handle the com
10820 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69 6e 74 65  mon case of inte
10830 67 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68  ger comparison h
10840 65 72 65 2c 20 61 73 20 61 6e 0a 20 20 20 20 20  ere, as an.     
10850 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   ** optimization
10860 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 63 61 6c  , to avoid a cal
10870 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43  l to sqlite3MemC
10880 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 20 20  ompare() */.    
10890 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
108a0 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73  gs & pIn3->flags
108b0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
108c0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  {.        if( pI
108d0 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e  n3->u.i > pIn1->
108e0 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b  u.i ){ res = +1;
108f0 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70   goto compare_op
10900 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20  ; }.        if( 
10910 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31  pIn3->u.i < pIn1
10920 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d  ->u.i ){ res = -
10930 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f  1; goto compare_
10940 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 72 65  op; }.        re
10950 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67  s = 0;.        g
10960 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a  oto compare_op;.
10970 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
10980 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d  e if( affinity==
10990 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
109a0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  ){.      if( (fl
109b0 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d  ags1 & MEM_Str)=
109c0 3d 30 20 26 26 20 28 66 6c 61 67 73 31 20 26 20  =0 && (flags1 & 
109d0 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
109e0 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
109f0 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
10a00 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
10a10 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
10a20 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10a30 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
10a40 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10a50 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
10a60 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
10a70 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
10a80 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d  tcase( (flags1&M
10a90 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31  EM_Dyn) != (pIn1
10aa0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
10ab0 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
10ac0 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s1 = (pIn1->flag
10ad0 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
10ae0 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d  k) | (flags1 & M
10af0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
10b00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 49        assert( pI
10b10 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20  n1!=pIn3 );.    
10b20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66    }.      if( (f
10b30 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29  lags3 & MEM_Str)
10b40 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20 26  ==0 && (flags3 &
10b50 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
10b60 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
10b70 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10b80 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
10b90 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
10ba0 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10bb0 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
10bc0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10bd0 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
10be0 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn3, encoding
10bf0 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
10c00 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 33 26  stcase( (flags3&
10c10 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
10c20 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  3->flags&MEM_Dyn
10c30 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
10c40 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  gs3 = (pIn3->fla
10c50 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
10c60 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20  sk) | (flags3 & 
10c70 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
10c80 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
10c90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10ca0 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
10cb0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c   || pOp->p4.pCol
10cc0 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 73 20  l==0 );.    res 
10cd0 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
10ce0 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
10cf0 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
10d00 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a    }.compare_op:.
10d10 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
10d20 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
10d30 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 32  e OP_Eq:    res2
10d40 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
10d50 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
10d60 50 5f 4e 65 3a 20 20 20 20 72 65 73 32 20 3d 20  P_Ne:    res2 = 
10d70 72 65 73 3b 20 20 20 20 20 20 20 20 62 72 65 61  res;        brea
10d80 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
10d90 74 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65 73  t:    res2 = res
10da0 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
10db0 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
10dc0 20 20 20 72 65 73 32 20 3d 20 72 65 73 3c 3d 30     res2 = res<=0
10dd0 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10de0 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
10df0 72 65 73 32 20 3d 20 72 65 73 3e 30 3b 20 20 20  res2 = res>0;   
10e00 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
10e10 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
10e20 32 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  2 = res>=0;     
10e30 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
10e40 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65   Undo any change
10e50 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41  s made by applyA
10e60 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65  ffinity() to the
10e70 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
10e80 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  . */.  assert( (
10e90 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10ea0 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73  M_Dyn) == (flags
10eb0 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  1 & MEM_Dyn) );.
10ec0 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
10ed0 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74  flags1;.  assert
10ee0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
10ef0 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
10f00 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags3 & MEM_Dyn) 
10f10 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
10f20 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66   = flags3;..  if
10f30 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
10f40 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
10f50 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
10f60 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f  Op->p2];.    iCo
10f70 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20  mpare = res;.   
10f80 20 72 65 73 32 20 3d 20 72 65 73 32 21 3d 30 3b   res2 = res2!=0;
10f90 20 20 2f 2a 20 46 6f 72 20 74 68 69 73 20 70 61    /* For this pa
10fa0 74 68 20 72 65 73 32 20 6d 75 73 74 20 62 65 20  th res2 must be 
10fb0 65 78 61 63 74 6c 79 20 30 20 6f 72 20 31 20 2a  exactly 0 or 1 *
10fc0 2f 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  /.    if( (pOp->
10fd0 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50  p5 & SQLITE_KEEP
10fe0 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20  NULL)!=0 ){.    
10ff0 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c    /* The KEEPNUL
11000 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20  L flag prevents 
11010 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77  OP_Eq from overw
11020 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69  riting a NULL wi
11030 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e  th 1.      ** an
11040 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65  d prevents OP_Ne
11050 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
11060 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20  g NULL with 0.  
11070 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20  This flag.      
11080 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  ** is only used 
11090 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  in contexts wher
110a0 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20  e either:.      
110b0 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f  **   (1) op==OP_
110c0 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Eq && (r[P2]==NU
110d0 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a  LL || r[P2]==0).
110e0 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f        **   (2) o
110f0 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50  p==OP_Ne && (r[P
11100 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32  2]==NULL || r[P2
11110 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54  ]==1).      ** T
11120 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e  herefore it is n
11130 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  ot necessary to 
11140 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e  check the conten
11150 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20  t of r[P2] for. 
11160 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f       ** NULL. */
11170 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
11180 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
11190 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
111a0 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
111b0 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30   assert( res2==0
111c0 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20   || res2==1 );. 
111d0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
111e0 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
111f0 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
11200 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
11210 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
11220 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
11230 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
11240 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d   res2==0 && pOp-
11250 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
11260 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
11270 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70  ( res2==1 && pOp
11280 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11290 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f  );.      if( (pO
112a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
112b0 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b  )==res2 ) break;
112c0 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62  .    }.    memAb
112d0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
112e0 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
112f0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
11300 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
11310 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20  t->u.i = res2;. 
11320 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
11330 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
11340 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
11350 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
11360 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  es!=0, (pOp->p5 
11370 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
11380 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
11390 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  es2 ){.      got
113a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
113b0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
113c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .}../* Opcode: E
113d0 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20  lseNotEq * P2 * 
113e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
113f0 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64  pcode must immed
11400 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e  iately follow an
11410 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20   OP_Lt or OP_Gt 
11420 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
11430 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c  tor..** If resul
11440 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f  t of an OP_Eq co
11450 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20  mparison on the 
11460 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64  same two operand
11470 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
11480 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65  be NULL or false
11490 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20   (0), then then 
114a0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20  jump to P2. .** 
114b0 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
114c0 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72   an OP_Eq compar
114d0 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20  ison on the two 
114e0 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64  previous operand
114f0 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
11500 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74  been true (1), t
11510 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
11520 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73  ..*/.case OP_Els
11530 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20  eNotEq: {       
11540 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53  /* same as TK_ES
11550 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20  CAPE, jump */.  
11560 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
11570 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11580 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
11590 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70  Lt || pOp[-1].op
115a0 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20  code==OP_Gt );. 
115b0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
115c0 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  .p5 & SQLITE_STO
115d0 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72  REP2 );.  VdbeBr
115e0 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61  anchTaken(iCompa
115f0 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  re!=0, 2);.  if(
11600 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67   iCompare!=0 ) g
11610 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
11620 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
11630 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
11640 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
11650 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
11660 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
11670 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
11680 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
11690 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
116a0 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
116b0 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
116c0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
116d0 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
116e0 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
116f0 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
11700 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
11710 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
11720 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
11730 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
11740 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
11750 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
11760 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a  e OP_Compare..**
11770 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e  .** The first in
11780 74 65 67 65 72 20 69 6e 20 74 68 65 20 50 34 20  teger in the P4 
11790 69 6e 74 65 67 65 72 20 61 72 72 61 79 20 69 73  integer array is
117a0 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   the length of t
117b0 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20  he array.** and 
117c0 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20  does not become 
117d0 70 61 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d  part of the perm
117e0 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  utation..*/.case
117f0 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a   OP_Permutation:
11800 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
11810 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
11820 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72  ARRAY );.  asser
11830 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b  t( pOp->p4.ai );
11840 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f  .  aPermute = pO
11850 70 2d 3e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20  p->p4.ai + 1;.  
11860 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11870 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
11880 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
11890 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
118a0 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
118b0 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
118c0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
118d0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
118e0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
118f0 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
11900 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
11910 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
11920 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
11930 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
11940 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
11950 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
11960 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
11970 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
11980 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
11990 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
119a0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
119b0 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
119c0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
119d0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
119e0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
119f0 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
11a00 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
11a10 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
11a20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
11a30 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
11a40 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
11a50 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
11a60 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
11a70 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
11a80 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
11a90 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
11aa0 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
11ab0 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
11ac0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
11ad0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
11ae0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
11af0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
11b00 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
11b10 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
11b20 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
11b30 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
11b40 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
11b50 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
11b60 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
11b70 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
11b80 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
11b90 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
11ba0 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
11bb0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
11bc0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
11bd0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
11be0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
11bf0 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
11c00 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
11c10 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
11c20 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
11c30 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
11c40 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11c50 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
11c60 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
11c70 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
11c80 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
11c90 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
11ca0 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
11cb0 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
11cc0 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74  TE)==0 ) aPermut
11cd0 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70  e = 0;.  n = pOp
11ce0 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
11cf0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
11d00 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
11d10 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
11d20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
11d30 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
11d40 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
11d50 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
11d60 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
11d70 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
11d80 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
11d90 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
11da0 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
11db0 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
11dc0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
11dd0 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70  1>0 && p1+mx<=(p
11de0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11df0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
11e00 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
11e10 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p2+mx<=(p->nMem+
11e20 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
11e30 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
11e40 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
11e50 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p1+n<=(p->nMem
11e60 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
11e70 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
11e80 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d  ( p2>0 && p2+n<=
11e90 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11ea0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11eb0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
11ec0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
11ed0 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
11ee0 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
11ef0 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
11f00 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
11f10 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
11f20 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
11f30 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11f40 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
11f50 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
11f60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
11f70 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
11f80 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
11f90 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
11fa0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
11fb0 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
11fc0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
11fd0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
11fe0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
11ff0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
12000 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
12010 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
12020 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
12030 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
12040 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
12050 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
12060 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
12070 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
12080 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
12090 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
120a0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
120b0 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
120c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
120d0 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
120e0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
120f0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
12100 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
12110 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
12120 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
12130 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
12140 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
12150 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
12160 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
12170 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
12180 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
12190 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
121a0 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
121b0 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
121c0 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
121d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
121e0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
121f0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
12200 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70  nchTaken(0,3); p
12210 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
12220 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
12230 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
12240 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
12250 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70  hTaken(1,3); pOp
12260 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
12270 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
12280 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
12290 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(2,3); pOp = &
122a0 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
122b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
122c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
122d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
122e0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
122f0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
12300 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
12310 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
12320 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
12330 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
12340 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
12350 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
12360 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
12370 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
12380 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
12390 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
123a0 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
123b0 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
123c0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
123d0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
123e0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
123f0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
12400 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
12410 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12420 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
12430 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
12440 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
12450 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
12460 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
12470 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
12480 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
12490 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
124a0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
124b0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
124c0 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
124d0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
124e0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
124f0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
12500 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
12510 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
12520 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
12530 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
12540 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
12550 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
12560 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12570 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
12580 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
12590 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
125a0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
125b0 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
125c0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
125d0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
125e0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
125f0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
12600 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
12610 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
12620 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
12630 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
12640 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
12650 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
12660 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12670 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
12680 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
12690 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
126a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
126b0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
126c0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
126d0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
126e0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
126f0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
12700 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
12710 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
12720 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
12730 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
12740 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
12750 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
12760 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
12770 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
12780 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
12790 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
127a0 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
127b0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
127c0 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
127d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
127e0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
127f0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
12800 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
12810 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
12820 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
12830 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
12840 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
12850 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
12860 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
12870 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
12880 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
12890 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
128a0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
128b0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
128c0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
128d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
128e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
128f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
12900 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
12910 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
12920 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
12930 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12940 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
12950 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
12960 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
12970 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
12980 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
12990 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
129a0 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
129b0 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
129c0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
129d0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
129f0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
12a00 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
12a10 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12a20 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
12a30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
12a40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12a50 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
12a60 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
12a70 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
12a80 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
12a90 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
12aa0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
12ab0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
12ac0 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
12ad0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12ae0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
12af0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
12b00 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
12b10 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
12b20 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
12b30 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
12b40 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
12b50 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
12b60 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
12b70 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
12b80 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
12b90 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
12ba0 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
12bb0 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
12bc0 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
12bd0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
12be0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
12bf0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
12c00 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
12c10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
12c20 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
12c30 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
12c40 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
12c50 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
12c60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
12c70 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
12c80 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
12c90 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
12ca0 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
12cb0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
12cc0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12cd0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
12ce0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
12cf0 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
12d00 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
12d10 20 50 31 20 76 61 6c 75 65 20 6f 6e 20 74 68 65   P1 value on the
12d20 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20   OP_Init opcode 
12d30 61 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  at.** instructio
12d40 6e 20 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  n 0, then jump t
12d50 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20 74 77  o P2.  If the tw
12d60 6f 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66  o P1 values diff
12d70 65 72 2c 20 74 68 65 6e 0a 2a 2a 20 73 65 74 20  er, then.** set 
12d80 74 68 65 20 50 31 20 76 61 6c 75 65 20 6f 6e 20  the P1 value on 
12d90 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 65  this opcode to e
12da0 71 75 61 6c 20 74 68 65 20 50 31 20 76 61 6c 75  qual the P1 valu
12db0 65 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74  e on the OP_Init
12dc0 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  .** and fall thr
12dd0 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ough..*/.case OP
12de0 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
12df0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
12e00 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
12e10 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [0].opcode==OP_I
12e20 6e 69 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nit );.  VdbeBra
12e30 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 70 5b  nchTaken(p->aOp[
12e40 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 2c 20  0].p1==pOp->p1, 
12e50 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 70  2);.  if( p->aOp
12e60 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20  [0].p1==pOp->p1 
12e70 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
12e80 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
12e90 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
12ea0 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 7d  ->aOp[0].p1;.  }
12eb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12ec0 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32  Opcode: If P1 P2
12ed0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
12ee0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
12ef0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12f00 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54  r P1 is true.  T
12f10 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
12f20 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69  onsidered true i
12f30 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20  f it is numeric 
12f40 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49  and non-zero.  I
12f50 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
12f60 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
12f70 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
12f80 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
12f90 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
12fa0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  /./* Opcode: IfN
12fb0 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ot P1 P2 P3 * *.
12fc0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12fd0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12fe0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
12ff0 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75  False.  The valu
13000 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
13010 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68  ed false if it h
13020 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
13030 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
13040 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
13050 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
13060 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
13070 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
13080 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
13090 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
130a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
130b0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
130c0 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
130d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
130e0 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
130f0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
13100 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
13110 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13120 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20  M_Null ){.    c 
13130 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c  = pOp->p3;.  }el
13140 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  se{.#ifdef SQLIT
13150 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
13160 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71  POINT.    c = sq
13170 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
13180 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73  e(pIn1)!=0;.#els
13190 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
131a0 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
131b0 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
131c0 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
131d0 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
131e0 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
131f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
13200 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  c!=0, 2);.  if( 
13210 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  c ){.    goto ju
13220 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
13230 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13240 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50  ode: IsNull P1 P
13250 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
13260 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e  sis: if r[P1]==N
13270 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
13280 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
13290 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
132a0 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
132b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
132c0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
132d0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
132e0 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
132f0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
13300 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
13310 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
13320 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
13330 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29  MEM_Null)!=0, 2)
13340 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
13350 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13360 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
13370 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
13380 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13390 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
133a0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
133b0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
133c0 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
133d0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
133e0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
133f0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
13400 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
13410 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
13420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
13430 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
13440 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
13450 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
13460 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
13470 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
13480 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
13490 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
134a0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
134b0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
134c0 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
134d0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
134e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
134f0 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
13500 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
13510 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  sis: r[P3]=PX.**
13520 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
13530 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
13540 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
13550 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
13560 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
13570 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
13580 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
13590 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
135a0 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
135b0 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
135c0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
135d0 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
135e0 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
135f0 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
13600 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
13610 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
13620 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
13630 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
13640 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
13650 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
13660 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
13670 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
13680 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
13690 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75  *.** If the colu
136a0 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  mn contains fewe
136b0 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
136c0 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
136d0 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
136e0 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
136f0 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
13700 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
13710 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
13720 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
13730 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
13740 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
13750 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
13760 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
13770 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
13780 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
13790 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
137a0 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
137b0 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
137c0 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
137d0 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
137e0 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
137f0 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
13800 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
13810 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
13820 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
13830 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
13840 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
13850 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
13860 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
13870 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
13880 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
13890 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  when.** the resu
138a0 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
138b0 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
138c0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
138d0 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
138e0 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
138f0 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
13900 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
13910 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
13920 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
13930 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
13940 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
13950 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
13960 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
13970 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
13980 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
13990 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
139a0 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
139b0 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
139c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
139d0 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
139e0 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
139f0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
13a00 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
13a10 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
13a20 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
13a30 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
13a40 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
13a50 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
13a60 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
13a70 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
13a80 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
13a90 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
13aa0 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
13ab0 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
13ac0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
13ad0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
13ae0 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
13af0 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
13b00 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
13b10 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
13b20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
13b30 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
13b40 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
13b50 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
13b60 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
13b70 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
13b80 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
13b90 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
13ba0 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
13bb0 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
13bc0 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
13bd0 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
13be0 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
13bf0 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
13c00 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
13c10 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
13c20 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
13c30 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
13c40 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
13c50 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
13c60 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
13c70 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  32 avail;       
13c80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13c90 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
13ca0 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
13cb0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
13cc0 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
13cd0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
13ce0 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ader */.  Mem *p
13cf0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
13d00 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75  PseudoTable inpu
13d10 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20  t register */.. 
13d20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
13d30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20  Op->p1];.  p2 = 
13d40 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49  pOp->p2;..  /* I
13d50 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
13d60 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
13d70 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
13d80 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
13d90 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
13da0 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20  to(&pC, &p2);.  
13db0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
13dc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
13dd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
13de0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
13df0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
13e00 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
13e10 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
13e20 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
13e30 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
13e40 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28  Dest);.  assert(
13e50 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
13e60 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
13e70 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
13e80 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
13e90 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20  ( p2<pC->nField 
13ea0 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70  );.  aOffset = p
13eb0 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73  C->aOffset;.  as
13ec0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
13ed0 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe!=CURTYPE_VTAB
13ee0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
13ef0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
13f00 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
13f10 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61  ->nullRow );.  a
13f20 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13f30 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52  ype!=CURTYPE_SOR
13f40 54 45 52 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  TER );.  pCrsr =
13f50 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
13f60 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ..  if( pC->cach
13f70 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
13f80 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20  eCtr ){         
13f90 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a         /*OPTIMIZ
13fa0 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
13fb0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
13fc0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
13fd0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
13fe0 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29  CURTYPE_PSEUDO )
13ff0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
14000 28 20 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  ( pC->uc.pseudoT
14010 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
14020 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
14030 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  m[pC->uc.pseudoT
14040 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
14050 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
14060 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
14070 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
14080 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
14090 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
140a0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
140b0 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76  = pC->szRow = av
140c0 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ail = pReg->n;. 
140d0 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
140e0 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
140f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14100 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
14110 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
14120 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
14130 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
14140 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
14150 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
14160 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
14170 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
14180 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
14190 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  sr );.      asse
141a0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
141b0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
141c0 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43  rsr) );.      pC
141d0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
141e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
141f0 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
14200 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
14210 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
14220 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c  loadFetch(pCrsr,
14230 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
14240 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
14250 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
14260 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
14270 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
14280 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
14290 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
142a0 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
142b0 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
142c0 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
142d0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 61  }else if( pC->pa
142e0 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
142f0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
14300 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
14310 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14320 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
14330 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
14340 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
14350 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14360 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
14370 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
14380 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  r;.    pC->iHdrO
14390 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e  ffset = getVarin
143a0 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66  t32(pC->aRow, of
143b0 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  fset);.    pC->n
143c0 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20  HdrParsed = 0;. 
143d0 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20     aOffset[0] = 
143e0 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66  offset;...    if
143f0 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29  ( avail<offset )
14400 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
14410 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
14420 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
14430 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
14440 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
14450 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
14460 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
14470 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
14480 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
14490 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
144a0 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
144b0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
144c0 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
144d0 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
144e0 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
144f0 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
14500 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
14510 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
14520 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
14530 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
14540 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
14550 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
14560 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
14570 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
14580 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
14590 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
145a0 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
145b0 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
145c0 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
145d0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
145e0 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
145f0 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
14600 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
14610 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
14620 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
14630 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
14640 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
14650 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
14660 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
14670 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
14680 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
14690 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
146a0 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
146b0 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
146c0 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
146d0 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
146e0 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
146f0 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
14700 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
14710 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
14720 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
14730 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
14740 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
14750 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
14760 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6f 66 66  */.      if( off
14770 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
14780 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
14790 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
147a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
147b0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
147c0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
147d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
147e0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
147f0 69 66 28 20 6f 66 66 73 65 74 3e 30 20 29 7b 20  if( offset>0 ){ 
14800 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14810 46 2d 54 52 55 45 2a 2f 0a 20 20 20 20 20 20 2f  F-TRUE*/.      /
14820 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
14830 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d  goto is an optim
14840 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e  ization.  It can
14850 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a   be omitted and.
14860 20 20 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68        ** everyth
14870 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77  ing will still w
14880 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c  ork.  But OP_Col
14890 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c  umn is measurabl
148a0 79 20 66 61 73 74 65 72 0a 20 20 20 20 20 20 2a  y faster.      *
148b0 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68  * by skipping th
148c0 65 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e  e subsequent con
148d0 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20  ditional, which 
148e0 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a  is always true..
148f0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
14900 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
14910 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14920 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
14930 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
14940 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
14950 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74  ped */.      got
14960 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64  o op_column_read
14970 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20  _header;.    }. 
14980 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
14990 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
149a0 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
149b0 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
149c0 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
149d0 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
149e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
149f0 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
14a00 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20   pC->aType[]..  
14a10 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  */.  if( pC->nHd
14a20 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14a30 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
14a40 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76  s more header av
14a50 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73  ailable for pars
14a60 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ing in the recor
14a70 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f  d, try.    ** to
14a80 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f   extract additio
14a90 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68  nal fields up th
14aa0 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74  rough the p2+1-t
14ab0 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a  h field .    */.
14ac0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
14ad0 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
14ae0 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
14af0 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
14b00 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
14b10 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
14b20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
14b30 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
14b40 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
14b50 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
14b60 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
14b70 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
14b80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
14b90 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
14ba0 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
14bb0 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
14bc0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
14bd0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14be0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
14bf0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
14c00 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
14c10 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
14c20 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
14c30 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
14c40 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
14c50 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
14c60 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
14c70 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
14c80 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
14c90 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f   field. */.    o
14ca0 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
14cb0 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20  ader:.      i = 
14cc0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
14cd0 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d        offset64 =
14ce0 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
14cf0 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
14d00 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
14d10 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
14d20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
14d30 74 5b 30 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  t[0];.      do{.
14d40 20 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d          if( (t =
14d50 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29   zHdr[0])<0x80 )
14d60 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
14d70 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  ++;.          of
14d80 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
14d90 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
14da0 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
14db0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14dc0 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
14dd0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
14de0 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
14df0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
14e00 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
14e10 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
14e20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14e30 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d    pC->aType[i++]
14e40 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f   = t;.        aO
14e50 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29  ffset[i] = (u32)
14e60 28 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66  (offset64 & 0xff
14e70 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d  ffffff);.      }
14e80 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
14e90 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
14ea0 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
14eb0 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
14ec0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
14ed0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
14ee0 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
14ef0 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
14f00 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
14f10 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
14f20 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
14f30 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
14f40 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
14f50 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
14f60 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
14f70 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
14f80 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
14f90 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
14fa0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14fb0 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
14fc0 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
14fd0 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
14fe0 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
14ff0 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  t64!=pC->payload
15000 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
15010 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d   (offset64 > pC-
15020 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
15030 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
15040 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15050 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15060 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15070 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15080 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15090 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
150a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
150b0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
150c0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
150d0 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
150e0 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
150f0 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
15100 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
15110 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
15120 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
15130 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
15140 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
15150 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
15160 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
15170 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
15180 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
15190 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
151a0 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
151b0 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
151c0 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
151d0 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
151e0 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
151f0 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
15200 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
15210 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
15220 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
15230 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
15240 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
15250 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
15260 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
15270 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
15280 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15290 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
152a0 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
152b0 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
152c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
152d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
152e0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
152f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
15300 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
15310 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
15320 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
15330 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
15340 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
15350 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
15360 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
15370 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
15380 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
15390 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
153a0 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
153b0 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
153c0 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
153d0 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
153e0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
153f0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
15400 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
15410 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
15420 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
15430 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
15440 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
15450 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
15460 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
15470 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15480 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15490 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
154a0 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
154b0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
154c0 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
154d0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
154e0 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
154f0 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
15500 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
15510 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
15520 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
15530 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
15540 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
15550 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
15560 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15570 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
15580 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
15590 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
155a0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
155b0 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
155c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
155d0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
155e0 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
155f0 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
15600 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
15610 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
15620 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
15630 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
15640 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
15650 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
15660 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
15670 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
15680 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
15690 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
156a0 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
156b0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
156c0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
156d0 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
156e0 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
156f0 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
15700 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
15710 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
15720 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15730 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
15740 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
15750 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
15760 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
15770 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
15780 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
15790 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
157a0 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
157b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
157c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
157d0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
157e0 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
157f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
15800 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
15810 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
15820 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
15830 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
15840 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
15850 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15860 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
15870 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15880 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15890 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
158a0 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
158b0 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
158c0 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
158d0 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
158e0 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
158f0 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
15900 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
15910 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
15920 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
15930 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
15940 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
15950 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
15960 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
15970 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15980 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
15990 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
159a0 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
159b0 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
159c0 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
159d0 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
159e0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
159f0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
15a00 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
15a10 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
15a20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
15a30 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
15a40 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
15a50 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
15a60 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
15a70 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
15a80 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
15a90 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
15aa0 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20  m disk. */.     
15ab0 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
15ac0 5b 38 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  [8];  /* This is
15ad0 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
15ae0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
15af0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15b00 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
15b10 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
15b20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15b30 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
15b40 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
15b50 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69  p2], len, !pC->i
15b60 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20  sTable,.        
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 20 20 20 20 20 20 20 20 70 44 65 73 74             pDest
15b90 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
15ba0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15bb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15bc0 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
15bd0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15be0 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
15bf0 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
15c00 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
15c10 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
15c20 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
15c30 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
15c40 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15c50 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
15c60 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
15c70 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
15c80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
15c90 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
15ca0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
15cb0 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
15cc0 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
15cd0 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
15ce0 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
15cf0 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
15d00 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
15d10 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
15d20 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
15d30 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
15d40 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
15d50 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
15d60 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
15d70 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
15d80 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
15d90 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
15da0 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
15db0 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
15dc0 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
15dd0 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
15de0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
15df0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
15e00 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
15e10 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20    char cAff;    
15e20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
15e30 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
15e40 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   of affinity */.
15e50 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
15e60 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
15e70 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
15e80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41   );.  assert( zA
15e90 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d  ffinity[pOp->p2]
15ea0 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
15eb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
15ec0 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d    while( (cAff =
15ed0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29   *(zAffinity++))
15ee0 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
15ef0 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
15f00 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
15f10 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
15f20 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15f30 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15f40 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15f50 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
15f60 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
15f70 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
15f80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15f90 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
15fa0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
15fb0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
15fc0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
15fd0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
15fe0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
15ff0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
16000 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
16010 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
16020 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
16030 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
16040 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
16050 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
16060 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
16070 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
16080 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
16090 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
160a0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
160b0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
160c0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
160d0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
160e0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
160f0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
16100 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
16110 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
16120 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
16130 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
16140 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
16150 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
16160 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
16170 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
16180 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
16190 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
161a0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
161b0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
161c0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
161d0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
161e0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
161f0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
16200 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
16210 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
16220 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
16230 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
16240 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
16250 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
16260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16270 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
16280 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
16290 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
162a0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
162b0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
162c0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
162d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
162e0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
162f0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
16300 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
16310 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
16320 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
16330 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
16340 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
16350 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16360 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
16370 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16380 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
16390 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
163a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
163b0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
163c0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
163d0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
163e0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
163f0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
16400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
16410 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
16420 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
16430 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
16440 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
16450 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
16460 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
16470 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
16480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16490 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
164a0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
164b0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
164c0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
164d0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
164e0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
164f0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
16500 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
16510 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
16520 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
16530 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
16540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
16550 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
16560 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
16570 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
16580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
16590 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
165a0 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
165b0 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
165d0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
165e0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
165f0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
16600 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
16610 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
16620 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
16630 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
16640 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
16650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
16690 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
166a0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
166b0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
166c0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
166d0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
166e0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
166f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16710 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
16730 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
16740 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
16750 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
16760 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
16770 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
16780 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
16790 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
167a0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
167b0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
167c0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
167d0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
167e0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
167f0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
16800 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
16810 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
16820 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
16830 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
16840 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
16850 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
16860 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
16870 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
16880 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
16890 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
168a0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
168b0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
168c0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
168d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
168e0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
168f0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
16900 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
16910 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
16920 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
16930 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
16940 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
16950 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
16960 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
16970 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
16980 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
16990 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
169a0 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
169b0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
169c0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
169d0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
169e0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
169f0 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
16a00 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
16a10 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
16a20 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
16a30 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
16a40 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
16a50 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
16a60 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
16a70 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
16a80 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
16a90 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
16aa0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
16ab0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
16ac0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
16ad0 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
16ae0 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
16af0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
16b00 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
16b10 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
16b20 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
16b30 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
16b40 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
16b50 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
16b60 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
16b70 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
16b80 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
16b90 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
16ba0 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
16bb0 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
16bc0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
16bd0 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
16be0 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
16bf0 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
16c00 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
16c10 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
16c20 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
16c30 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
16c40 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
16c50 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
16c60 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
16c70 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16c80 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70  d(pRec) );.    p
16c90 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
16ca0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
16cb0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
16cc0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
16cd0 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
16ce0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
16cf0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
16d00 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
16d10 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16d20 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
16d30 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74  Blob(pRec) ) got
16d40 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
16d50 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e  }else{.        n
16d60 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
16d70 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c  nZero;.        l
16d80 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  en -= pRec->u.nZ
16d90 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ero;.      }.   
16da0 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20   }.    nData += 
16db0 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73  len;.    testcas
16dc0 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16dd0 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63  127 );.    testc
16de0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
16df0 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64  ==128 );.    nHd
16e00 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65  r += serial_type
16e10 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69  <=127 ? 1 : sqli
16e20 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72  te3VarintLen(ser
16e30 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
16e40 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
16e50 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
16e60 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
16e70 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
16e80 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
16e90 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
16ea0 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
16eb0 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
16ec0 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
16ed0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
16ee0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16ef0 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
16f00 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
16f10 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
16f20 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
16f30 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
16f40 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
16f50 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
16f60 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
16f70 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
16f80 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
16f90 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
16fa0 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
16fb0 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
16fc0 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
16fd0 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
16fe0 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
16ff0 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
17000 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
17010 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
17020 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
17030 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
17040 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
17050 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
17060 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
17070 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
17080 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
17090 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d  e+nZero>db->aLim
170a0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
170b0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
170c0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
170d0 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
170e0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
170f0 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
17100 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
17110 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
17120 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
17130 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
17140 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
17150 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
17160 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
17170 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
17180 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
17190 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
171a0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
171b0 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
171c0 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  e() could clobbe
171d0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
171e0 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
171f0 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
17200 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
17210 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69  dResize(pOut, (i
17220 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20  nt)nByte) ){.   
17230 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
17240 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
17250 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
17260 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
17270 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
17280 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
17290 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
172a0 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73   j = nHdr;.  ass
172b0 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
172c0 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
172d0 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
172e0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70   serial_type = p
172f0 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20  Rec->uTemp;.    
17300 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
17310 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f  R-06529-47362 Fo
17320 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65  llowing the size
17330 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20   varint are one 
17340 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61  or more.    ** a
17350 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
17360 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
17370 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70  n. */.    i += p
17380 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
17390 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
173a0 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
173b0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
173c0 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49  pe */.    /* EVI
173d0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33  DENCE-OF: R-6453
173e0 36 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75  6-51728 The valu
173f0 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
17400 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
17410 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
17420 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68  ely follow the h
17430 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20  eader. */.    j 
17440 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
17450 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
17460 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65  ord[j], pRec, se
17470 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63  rial_type); /* c
17480 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69  ontent */.  }whi
17490 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c  le( (++pRec)<=pL
174a0 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ast );.  assert(
174b0 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73   i==nHdr );.  as
174c0 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29  sert( j==nByte )
174d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
174e0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
174f0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
17500 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
17510 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
17520 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
17530 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
17540 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
17550 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
17560 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
17570 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
17580 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
17590 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
175a0 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
175b0 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
175c0 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
175d0 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
175e0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
175f0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
17600 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
17610 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
17620 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
17630 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
17640 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
17650 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
17660 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
17670 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
17680 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
17690 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
176a0 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
176b0 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
176c0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
176d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
176e0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
176f0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
17700 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
17710 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
17720 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
17730 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
17740 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
17750 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
17760 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
17770 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
17780 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
17790 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
177a0 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
177b0 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
177c0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
177d0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
177e0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
177f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
17800 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
17810 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
17820 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17830 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
17840 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
17850 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
17860 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
17870 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
17880 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
17890 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
178a0 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
178b0 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
178c0 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
178d0 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
178e0 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
178f0 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
17900 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
17910 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
17920 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
17930 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
17940 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
17950 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
17960 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
17970 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
17980 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
17990 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
179a0 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
179d0 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
179e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
17a10 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
17a20 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
17a30 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
17a40 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
17a50 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
17a60 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
17a70 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
17a80 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
17a90 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
17aa0 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
17ab0 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
17ac0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
17ad0 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
17ae0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
17af0 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
17b00 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
17b10 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
17b20 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
17b30 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
17b40 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
17b50 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17b60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
17b70 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
17b80 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
17b90 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
17ba0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
17bb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
17bc0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
17bd0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17be0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
17bf0 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
17c00 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
17c10 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
17c20 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
17c30 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
17c40 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
17c50 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
17c60 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
17c70 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
17c80 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
17c90 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
17ca0 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
17cb0 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
17cc0 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
17cd0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
17ce0 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
17cf0 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
17d00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
17d10 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
17d20 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
17d30 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
17d40 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
17d50 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17d60 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
17d70 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
17d80 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
17d90 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
17da0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
17db0 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
17dc0 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
17dd0 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
17de0 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
17df0 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
17e00 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
17e10 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
17e20 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
17e30 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
17e40 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
17e50 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
17e60 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
17e70 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
17e80 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
17e90 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
17ea0 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
17eb0 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
17ec0 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
17ed0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
17ee0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
17ef0 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
17f00 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
17f10 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
17f20 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
17f30 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
17f60 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
17f70 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
17f80 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17f90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17fa0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
17fb0 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
17fc0 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
17fd0 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
17fe0 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
17ff0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
18000 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
18010 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
18020 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
18030 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
18040 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
18050 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
18060 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
18070 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
18080 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
18090 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
180a0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
180b0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
180c0 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
180d0 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
180e0 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
180f0 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
18100 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
18110 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
18120 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
18130 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
18140 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
18150 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
18160 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
18170 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
18180 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
18190 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
181a0 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
181b0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
181c0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
181d0 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
181e0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
181f0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
18200 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
18210 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
18220 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
18230 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
18240 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18250 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
18260 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
18270 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
18280 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
18290 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
182a0 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
182b0 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
182c0 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
182d0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
182e0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
182f0 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
18300 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
18310 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
18320 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
18330 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
18340 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
18350 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
18360 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
18370 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
18380 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
18390 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
183a0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
183b0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
183c0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
183d0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
183e0 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
183f0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
18400 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
18410 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
18420 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
18430 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
18440 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
18450 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
18460 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
18470 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18480 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
18490 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
184a0 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
184b0 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
184c0 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
184d0 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
184e0 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
184f0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
18500 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
18510 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
18520 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
18530 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
18550 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
18560 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
18570 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
18580 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
18590 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
185a0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
185b0 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
185c0 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
185d0 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
185e0 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
185f0 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
18600 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
18610 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
18620 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
18630 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
18640 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
18650 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
18660 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
18670 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
18680 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
18690 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
186a0 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
186b0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
186c0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
186d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
186e0 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
186f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
18700 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
18710 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
18720 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
18730 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
18740 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
18750 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
18760 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18770 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
18780 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
18790 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
187a0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
187b0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
187c0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
187d0 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
187e0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
187f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18800 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
18810 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
18820 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
18830 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
18840 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
18850 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
18860 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
18870 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
18880 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
18890 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
188a0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
188b0 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
188c0 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
188d0 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  nge = (db->flags
188e0 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   & SQLITE_Intern
188f0 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20  Changes)!=0;.   
18900 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
18910 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
18920 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
18930 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18940 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
18950 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41          SQLITE_A
18990 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20  BORT_ROLLBACK,. 
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
189d0 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20  ange==0);.      
189e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
189f0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
18a00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18a10 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
18a20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
18a30 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
18a40 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20  Change = 0;.    
18a50 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
18a60 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
18a70 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
18a80 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18a90 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
18aa0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18ab0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
18ac0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
18ad0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
18af0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18b00 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18b10 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
18b20 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61      if( isSchema
18b30 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20  Change ){.      
18b40 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
18b50 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
18b60 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
18b70 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
18b80 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
18b90 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
18ba0 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d       db->flags =
18bb0 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51   (db->flags | SQ
18bc0 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
18bd0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  es);.        }. 
18be0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
18bf0 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
18c00 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
18c10 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
18c20 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
18c30 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
18c40 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
18c50 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
18c60 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18c70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
18c80 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
18c90 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
18ca0 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
18cb0 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
18cc0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
18cd0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18ce0 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
18cf0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
18d00 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
18d10 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
18d20 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
18d30 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
18d40 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
18d50 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
18d60 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
18d70 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
18d80 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
18d90 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
18da0 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
18db0 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
18dc0 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
18dd0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
18de0 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
18df0 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
18e00 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
18e10 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
18e20 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
18e30 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
18e40 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18e50 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
18e60 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
18e70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
18e80 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
18e90 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
18ea0 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
18eb0 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
18ec0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18ed0 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
18ee0 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
18ef0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
18f00 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
18f10 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
18f20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
18f30 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
18f40 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
18f50 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
18f60 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
18f70 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
18f80 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
18f90 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  t->nDeferredImmC
18fa0 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ons;.      }..  
18fb0 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
18fc0 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41  action || p1==SA
18fd0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
18fe0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
18ff0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
19000 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53  point(db, p1, iS
19010 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
19020 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19030 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
19040 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19050 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
19060 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
19070 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19080 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  rror;..  break;.
19090 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
190a0 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
190b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
190c0 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
190d0 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
190e0 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
190f0 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
19100 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
19110 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
19120 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
19130 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
19140 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
19150 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
19160 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
19170 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
19180 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
19190 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
191a0 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
191b0 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
191c0 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
191d0 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  cache..**.** Thi
191e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
191f0 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
19200 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
19210 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
19220 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
19230 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f  ommit;.  int iRo
19240 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73 69 72  llback;..  desir
19250 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70  edAutoCommit = p
19260 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62  Op->p1;.  iRollb
19270 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
19280 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19290 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
192a0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
192b0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
192c0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
192d0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
192e0 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
192f0 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63  ert( db->nVdbeAc
19300 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74  tive>0 );  /* At
19310 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20   least this one 
19320 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a  VM is active */.
19330 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19340 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
19350 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19360 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
19370 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
19380 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
19390 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
193a0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
193b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
193c0 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51  llbackAll(db, SQ
193d0 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
193e0 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  ACK);.      db->
193f0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
19400 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65      }else if( de
19410 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
19420 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  && db->nVdbeWrit
19430 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
19440 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
19450 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
19460 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
19470 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
19480 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74 75 72  g.      ** retur
19490 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
194a0 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
194b0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
194c0 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
194d0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
194e0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
194f0 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74  , "cannot commit
19500 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
19510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19520 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
19530 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
19540 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
19550 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
19560 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
19570 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19580 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
19590 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
195a0 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
195b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
195c0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
195d0 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
195e0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
195f0 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
19600 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
19610 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
19620 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
19630 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
19640 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
19650 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
19660 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
19670 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
19680 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
19690 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
196a0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
196b0 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
196c0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
196d0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
196e0 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
196f0 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
19700 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
19710 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
19720 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
19730 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
19740 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
19750 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19760 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
19770 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
19780 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
19790 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
197a0 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64  r(p,.        (!d
197b0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
197c0 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
197d0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
197e0 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
197f0 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
19800 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
19810 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
19820 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
19830 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
19840 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
19850 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
19860 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
19870 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
19880 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
19890 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f  TE_ERROR;.    go
198a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
198b0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
198c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
198d0 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
198e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
198f0 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
19900 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61  action on databa
19910 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73  se P1 if a trans
19920 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c  action is not al
19930 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e  ready.** active.
19940 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
19950 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
19960 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
19970 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69  is started, or i
19980 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61  f a .** read-tra
19990 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65  nsaction is alre
199a0 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69  ady active, it i
199b0 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20  s upgraded to a 
199c0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
199d0 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  n..** If P2 is z
199e0 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
199f0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
19a00 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  started..**.** P
19a10 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
19a20 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
19a30 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
19a40 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
19a50 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
19a60 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
19a70 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
19a80 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
19a90 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
19aa0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
19ab0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
19ac0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
19ad0 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
19ae0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
19af0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
19b00 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
19b10 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
19b20 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
19b30 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
19b40 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
19b50 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
19b60 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
19b70 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
19b80 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
19b90 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
19ba0 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
19bb0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
19bc0 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
19bd0 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
19be0 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
19bf0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
19c00 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
19c10 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
19c20 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
19c30 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
19c40 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
19c50 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
19c60 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
19c70 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
19c80 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19c90 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
19ca0 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
19cb0 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
19cc0 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
19cd0 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
19ce0 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
19cf0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
19d00 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
19d10 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
19d20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
19d30 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19d40 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
19d50 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
19d60 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
19d70 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
19d80 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
19d90 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
19da0 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
19db0 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
19dc0 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
19dd0 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
19de0 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
19df0 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
19e00 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
19e10 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
19e20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
19e30 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
19e40 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
19e50 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
19e60 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
19e70 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
19e80 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
19e90 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
19ea0 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
19eb0 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68  e schema.  If th
19ec0 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b  e schema.** cook
19ed0 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73  ie in P3 differs
19ee0 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61   from the schema
19ef0 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64   cookie in the d
19f00 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f  atabase header o
19f10 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65  r.** if the sche
19f20 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
19f30 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66  unter in P4 diff
19f40 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ers from the cur
19f50 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69  rent.** generati
19f60 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e  on counter, then
19f70 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
19f80 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  A error is raise
19f90 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a  d and execution.
19fa0 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73  ** halts.  The s
19fb0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72  qlite3_step() wr
19fc0 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d  apper function m
19fd0 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70  ight then reprep
19fe0 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65  are the.** state
19ff0 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69  ment and rerun i
1a000 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
1a010 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ning..*/.case OP
1a020 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
1a030 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
1a040 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
1a050 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74   iGen;..  assert
1a060 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a070 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
1a080 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
1a090 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
1a0a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1a0b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1a0c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1a0d0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1a0e0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1a0f0 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  1) );.  if( pOp-
1a100 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  >p2 && (db->flag
1a110 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79  s & SQLITE_Query
1a120 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20  Only)!=0 ){.    
1a130 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44  rc = SQLITE_READ
1a140 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61  ONLY;.    goto a
1a150 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a160 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64  r;.  }.  pBt = d
1a170 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1a180 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
1a190 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1a1a0 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1a1b0 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
1a1c0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1a1d0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1a1e0 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20  SNAPSHOT );.    
1a1f0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1a200 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45  LITE_BUSY_RECOVE
1a210 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63  RY );.    if( rc
1a220 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a230 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66       if( (rc&0xf
1a240 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  f)==SQLITE_BUSY 
1a250 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
1a260 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
1a270 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Op);.        p->
1a280 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 20  rc = rc;.       
1a290 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1a2a0 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
1a2b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a2c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a2d0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
1a2e0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
1a2f0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
1a300 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
1a310 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
1a320 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
1a330 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1a340 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
1a350 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
1a360 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
1a370 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
1a380 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
1a390 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
1a3a0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
1a3b0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
1a3c0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
1a3d0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
1a3e0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
1a3f0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
1a400 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
1a410 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a420 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1a430 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
1a440 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
1a450 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
1a460 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1a470 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1a480 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1a490 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
1a4a0 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
1a4b0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
1a4c0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
1a4d0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
1a4e0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
1a4f0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
1a500 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
1a510 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
1a520 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
1a530 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
1a540 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
1a550 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1a560 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
1a570 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
1a580 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
1a590 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
1a5a0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
1a5b0 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
1a5c0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
1a5d0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
1a5e0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
1a5f0 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
1a600 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
1a610 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
1a620 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
1a630 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33  NTATION-OF: R-03
1a640 31 38 39 2d 35 31 31 33 35 20 41 73 20 65 61 63  189-51135 As eac
1a650 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  h SQL statement 
1a660 72 75 6e 73 2c 20 74 68 65 20 73 63 68 65 6d 61  runs, the schema
1a670 0a 20 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20  .    ** version 
1a680 69 73 20 63 68 65 63 6b 65 64 20 74 6f 20 65 6e  is checked to en
1a690 73 75 72 65 20 74 68 61 74 20 74 68 65 20 73 63  sure that the sc
1a6a0 68 65 6d 61 20 68 61 73 20 6e 6f 74 20 63 68 61  hema has not cha
1a6b0 6e 67 65 64 20 73 69 6e 63 65 20 74 68 65 0a 20  nged since the. 
1a6c0 20 20 20 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d     ** SQL statem
1a6d0 65 6e 74 20 77 61 73 20 70 72 65 70 61 72 65 64  ent was prepared
1a6e0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
1a6f0 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
1a700 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45  (pBt, BTREE_SCHE
1a710 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32  MA_VERSION, (u32
1a720 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20   *)&iMeta);.    
1a730 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70  iGen = db->aDb[p
1a740 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
1a750 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20  >iGeneration;.  
1a760 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20  }else{.    iGen 
1a770 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d  = iMeta = 0;.  }
1a780 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a790 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  p5==0 || pOp->p4
1a7a0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1a7b0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
1a7c0 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  && (iMeta!=pOp->
1a7d0 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p3 || iGen!=pOp-
1a7e0 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71  >p4.i) ){.    sq
1a7f0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
1a800 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
1a810 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
1a820 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
1a830 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
1a840 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
1a850 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
1a860 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
1a870 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
1a880 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
1a890 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
1a8a0 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
1a8b0 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
1a8c0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
1a8d0 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
1a8e0 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
1a8f0 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
1a900 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1a910 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
1a920 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
1a930 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
1a940 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
1a950 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
1a960 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
1a970 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
1a980 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
1a990 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
1a9a0 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
1a9b0 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
1a9c0 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
1a9d0 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
1a9e0 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
1a9f0 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
1aa00 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
1aa10 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
1aa20 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
1aa30 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
1aa40 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
1aa50 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
1aa60 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
1aa70 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
1aa80 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
1aa90 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
1aaa0 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
1aab0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
1aac0 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
1aad0 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
1aae0 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
1aaf0 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
1ab00 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
1ab10 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
1ab20 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
1ab30 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
1ab40 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
1ab50 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
1ab60 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
1ab70 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
1ab80 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
1ab90 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  1);.    }.    p-
1aba0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
1abb0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
1abc0 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20  HEMA;.  }.  if( 
1abd0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1abe0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1abf0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ac00 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20  ode: ReadCookie 
1ac10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1ac20 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e  ** Read cookie n
1ac30 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61  umber P3 from da
1ac40 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72  tabase P1 and wr
1ac50 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69  ite it into regi
1ac60 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d  ster P2..** P3==
1ac70 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
1ac80 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20  version.  P3==2 
1ac90 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1aca0 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33  format..** P3==3
1acb0 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
1acc0 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
1acd0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1ace0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
1acf0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1ad00 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
1ad10 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
1ad20 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
1ad30 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
1ad40 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
1ad50 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20  There must be a 
1ad60 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65  read-lock on the
1ad70 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65   database (eithe
1ad80 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  r a transaction.
1ad90 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  ** must be start
1ada0 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74  ed or there must
1adb0 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73   be an open curs
1adc0 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78  or) before.** ex
1add0 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73  ecuting this ins
1ade0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
1adf0 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a  e OP_ReadCookie:
1ae00 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1ae10 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
1ae20 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
1ae30 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  Db;.  int iCooki
1ae40 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
1ae50 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1ae60 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
1ae70 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e   iCookie = pOp->
1ae80 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p3;.  assert( pO
1ae90 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p3<SQLITE_N_B
1aea0 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
1aeb0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
1aec0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
1aed0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44    assert( db->aD
1aee0 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b  b[iDb].pBt!=0 );
1aef0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1af00 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1af10 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73  sk, iDb) );..  s
1af20 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
1af30 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ta(db->aDb[iDb].
1af40 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75  pBt, iCookie, (u
1af50 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
1af60 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
1af70 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
1af80 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65   pOut->u.i = iMe
1af90 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ta;.  break;.}..
1afa0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f  /* Opcode: SetCo
1afb0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1afc0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
1afd0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
1afe0 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  P3 into cookie n
1aff0 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
1b000 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d  base P1..** P2==
1b010 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
1b020 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 32 20  version.  P2==2 
1b030 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1b040 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33  format..** P2==3
1b050 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
1b060 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
1b070 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  .** size, and so
1b080 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1b090 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
1b0a0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
1b0b0 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61  =1 is the .** da
1b0c0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1b0d0 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
1b0e0 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
1b0f0 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
1b100 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
1b110 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67  before executing
1b120 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1b130 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b  .case OP_SetCook
1b140 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44 62 3b  ie: {.  Db *pDb;
1b150 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b160 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
1b170 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
1b180 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1b190 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
1b1a0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1b1b0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1b1c0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
1b1d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1b1e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1b1f0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
1b200 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1b210 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
1b220 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
1b230 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1b240 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
1b250 2c 20 30 29 20 29 3b 0a 20 20 2f 2a 20 53 65 65  , 0) );.  /* See
1b260 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
1b270 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
1b280 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
1b290 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b2a0 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
1b2b0 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
1b2c0 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20  pOp->p3);.  if( 
1b2d0 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53  pOp->p2==BTREE_S
1b2e0 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b  CHEMA_VERSION ){
1b2f0 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65  .    /* When the
1b300 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1b310 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74  hanges, record t
1b320 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e  he new cookie in
1b330 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20  ternally */.    
1b340 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63  pDb->pSchema->sc
1b350 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f  hema_cookie = pO
1b360 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d 3e 66  p->p3;.    db->f
1b370 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
1b380 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
1b390 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1b3a0 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
1b3b0 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
1b3c0 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
1b3d0 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
1b3e0 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1b3f0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1b400 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  t = pOp->p3;.  }
1b410 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
1b420 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
1b430 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
1b440 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
1b450 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
1b460 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
1b470 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
1b480 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
1b490 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
1b4a0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
1b4b0 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
1b4c0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
1b4d0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1b4e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b4f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1b500 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b510 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
1b520 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1b530 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1b540 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1b550 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
1b560 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
1b570 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
1b580 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
1b590 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
1b5a0 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
1b5b0 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
1b5c0 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
1b5d0 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
1b5e0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1b5f0 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
1b600 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
1b610 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
1b620 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
1b630 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
1b640 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1b650 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
1b660 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
1b670 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
1b680 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
1b690 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
1b6a0 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
1b6b0 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
1b6c0 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
1b6d0 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
1b6e0 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
1b6f0 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
1b700 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
1b710 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
1b720 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
1b730 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
1b740 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
1b750 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
1b760 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
1b770 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
1b780 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
1b790 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1b7a0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
1b7b0 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
1b7c0 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
1b7d0 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
1b7e0 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
1b7f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
1b800 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
1b810 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
1b820 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
1b830 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
1b840 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
1b850 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
1b860 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
1b870 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
1b880 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
1b890 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
1b8a0 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
1b8b0 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
1b8c0 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
1b8d0 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
1b8e0 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
1b8f0 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
1b900 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
1b910 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
1b920 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
1b930 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
1b940 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
1b950 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
1b960 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
1b970 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1b980 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1b990 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1b9a0 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1b9b0 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1b9c0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1b9d0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1b9e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1b9f0 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
1ba00 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
1ba10 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
1ba20 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1ba30 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1ba40 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
1ba50 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
1ba60 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
1ba70 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1ba80 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
1ba90 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
1baa0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1bab0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
1bac0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
1bad0 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
1bae0 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
1baf0 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
1bb00 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1bb10 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1bb20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
1bb30 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1bb40 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  e works exactly 
1bb50 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78  like ReadOpen ex
1bb60 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72  cept that it fir
1bb70 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  st.** checks to 
1bb80 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f  see if the curso
1bb90 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61  r on P1 is alrea
1bba0 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72  dy open with a r
1bbb0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  oot page.** numb
1bbc0 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20  er of P2 and if 
1bbd0 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
1bbe0 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
1bbf0 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
1bc00 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
1bc10 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
1bc20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
1bc30 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
1bc40 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1bc50 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
1bc60 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61  sed with P5==0 a
1bc70 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
1bc80 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f  .** a P4_KEYINFO
1bc90 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65   object.  Furthe
1bca0 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61  rmore, the P3 va
1bcb0 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65 20  lue must be the 
1bcc0 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79  same as.** every
1bcd0 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78   other ReopenIdx
1bce0 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72   or OpenRead for
1bcf0 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72   the same cursor
1bd00 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53   number..**.** S
1bd10 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20  ee the OpenRead 
1bd20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61  opcode documenta
1bd30 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
1bd40 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1bd50 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1bd60 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
1bd70 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1bd80 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1bd90 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1bda0 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1bdb0 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
1bdc0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1bdd0 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
1bde0 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
1bdf0 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
1be00 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1be10 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
1be20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
1be30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1be40 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1be50 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1be60 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1be70 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1be80 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1be90 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1bea0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1beb0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1bec0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1bed0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1bee0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1bef0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1bf00 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1bf10 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1bf20 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1bf30 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1bf40 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1bf50 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1bf60 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1bf70 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1bf80 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
1bf90 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
1bfa0 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
1bfb0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1bfc0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
1bfd0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
1bfe0 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
1bff0 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
1c000 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
1c010 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
1c020 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
1c030 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
1c040 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
1c050 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
1c060 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
1c070 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
1c080 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
1c090 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
1c0a0 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
1c0b0 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
1c0c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70  .*/.case OP_Reop
1c0d0 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e  enIdx: {.  int n
1c0e0 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1c0f0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1c100 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1c110 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1c120 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1c130 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1c140 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1c150 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1c160 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1c170 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1c180 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1c190 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1c1a0 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  );.  pCur = p->a
1c1b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c1c0 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75   if( pCur && pCu
1c1d0 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33  r->pgnoRoot==(u3
1c1e0 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  2)pOp->p2 ){.   
1c1f0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69   assert( pCur->i
1c200 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20  Db==pOp->p3 );  
1c210 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65      /* Guarantee
1c220 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65  d by the code ge
1c230 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67  nerator */.    g
1c240 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  oto open_cursor_
1c250 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20  set_hints;.  }. 
1c260 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
1c270 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  r is not current
1c280 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70  ly open or is op
1c290 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e  en on a differen
1c2a0 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68  t.  ** index, th
1c2b0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
1c2c0 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64  into OP_OpenRead
1c2d0 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70   to force a reop
1c2e0 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  en */.case OP_Op
1c2f0 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
1c300 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73  OpenWrite:..  as
1c310 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1c320 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1c330 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  || pOp->p5==0 ||
1c340 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1c350 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1c360 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1c370 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1c380 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1c390 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1c3a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1c3b0 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1c3c0 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1c3d0 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1c3e0 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1c3f0 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  = SQLITE_ABORT_R
1c400 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74  OLLBACK;.    got
1c410 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c420 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  rror;.  }..  nFi
1c430 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
1c440 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
1c450 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
1c460 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1c470 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
1c480 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
1c490 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1c4a0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1c4b0 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20  iDb) );.  pDb = 
1c4c0 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
1c4d0 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
1c4e0 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
1c4f0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
1c500 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1c510 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  te ){.    assert
1c520 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  ( OPFLAG_FORDELE
1c530 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c  TE==BTREE_FORDEL
1c540 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61  ETE );.    wrFla
1c550 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20  g = BTREE_WRCSR 
1c560 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
1c570 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a  LAG_FORDELETE);.
1c580 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1c590 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
1c5a0 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
1c5b0 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
1c5c0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1c5d0 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
1c5e0 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
1c5f0 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
1c600 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
1c610 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1c620 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
1c630 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
1c640 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
1c650 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1c660 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20  G_P2ISREG ){.   
1c670 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
1c680 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
1c690 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
1c6a0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1c6b0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
1c6c0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
1c6d0 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
1c6e0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1c6f0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
1c700 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
1c710 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1c720 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
1c730 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
1c740 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
1c750 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
1c760 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
1c770 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
1c780 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
1c790 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
1c7a0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1c7b0 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
1c7c0 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
1c7d0 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
1c7e0 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
1c7f0 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
1c800 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1c810 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
1c820 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
1c830 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
1c840 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
1c850 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  /.    assert( p2
1c860 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=2 );.  }.  if(
1c870 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1c880 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1c890 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1c8a0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1c8b0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1c8c0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1c8d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1c8e0 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1c8f0 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1c900 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1c910 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1c920 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1c930 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1c940 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1c950 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1c960 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1c970 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1c980 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1c990 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1c9a0 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1c9b0 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1c9c0 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1c9d0 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1c9e0 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1c9f0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1ca00 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1ca10 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52  iDb, CURTYPE_BTR
1ca20 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d  EE);.  if( pCur=
1ca30 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1ca40 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1ca50 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1ca60 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1ca70 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1ca80 20 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   p2;.#ifdef SQLI
1ca90 54 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d  TE_DEBUG.  pCur-
1caa0 3e 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67  >wrFlag = wrFlag
1cab0 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  ;.#endif.  rc = 
1cac0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1cad0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1cae0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1caf0 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  r->uc.pCursor);.
1cb00 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1cb10 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f   = pKeyInfo;.  /
1cb20 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1cb30 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1cb40 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1cb50 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1cb60 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1cb70 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1cb80 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1cb90 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1cba0 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1cbb0 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1cbc0 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1cbd0 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1cbe0 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1cbf0 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1cc00 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1cc10 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1cc20 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1cc30 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1cc40 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73  INFO;..open_curs
1cc50 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20  or_set_hints:.  
1cc60 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42  assert( OPFLAG_B
1cc70 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55  ULKCSR==BTREE_BU
1cc80 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65  LKLOAD );.  asse
1cc90 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  rt( OPFLAG_SEEKE
1cca0 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  Q==BTREE_SEEK_EQ
1ccb0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1ccc0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1ccd0 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64  _BULKCSR );.#ifd
1cce0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1ccf0 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20  _CURSOR_HINTS.  
1cd00 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
1cd10 32 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  2 & OPFLAG_SEEKE
1cd20 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  Q );.#endif.  sq
1cd30 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1cd40 48 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e  HintFlags(pCur->
1cd50 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20  uc.pCursor,.    
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1cd80 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1cd90 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1cda0 4b 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63  KEQ)));.  if( rc
1cdb0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1cdc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1cdd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1cde0 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1cdf0 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1ce00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1ce10 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1ce20 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1ce30 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1ce40 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1ce50 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1ce60 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1ce70 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1ce80 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1ce90 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1cea0 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1ceb0 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1cec0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1ced0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1cee0 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1cef0 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1cf00 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1cf10 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1cf20 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1cf30 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1cf40 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1cf50 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1cf60 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1cf70 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1cf80 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1cf90 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1cfa0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1cfb0 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1cfc0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1cfd0 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1cfe0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1cff0 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1d000 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1d010 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1d020 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1d030 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1d040 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1d050 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1d060 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1d070 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1d080 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1d090 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1d0a0 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1d0b0 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1d0c0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1d0d0 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1d0e0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1d0f0 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1d100 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1d110 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1d120 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d130 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1d140 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1d150 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1d160 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1d170 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1d180 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1d190 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1d1a0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1d1b0 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1d1c0 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1d1d0 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1d1e0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1d1f0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1d200 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1d210 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1d220 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1d230 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1d240 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1d250 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1d260 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1d270 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d280 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1d290 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1d2a0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1d2b0 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1d2c0 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1d2d0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1d2e0 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1d2f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1d300 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d310 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1d320 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d330 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1d340 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1d350 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1d360 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1d370 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1d380 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1d390 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1d3a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1d3b0 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1d3c0 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1d3d0 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1d3f0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1d400 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1d410 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1d420 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1d430 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d440 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d450 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1d460 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1d470 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1d480 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1d490 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1d4a0 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1d4b0 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1d4c0 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1d4d0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1d4e0 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1d4f0 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1d500 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1d510 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1d520 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1d530 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1d540 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1d550 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1d560 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1d570 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1d580 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1d590 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1d5a0 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20    if( (pKeyInfo 
1d5b0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1d5c0 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1d5d0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1d5e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1d5f0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1d600 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1d610 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1d620 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1d630 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1d640 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1d650 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1d660 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d670 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1d680 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1d690 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d6a0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1d6b0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1d6c0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1d6d0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1d6e0 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1d6f0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1d700 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  fo;.        rc =
1d710 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1d720 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1d730 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c  no, BTREE_WRCSR,
1d740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e   pKeyInfo, pCx->
1d770 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1d780 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
1d790 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
1d7a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1d7b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1d7c0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1d7d0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1d7e0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d800 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e          0, pCx->
1d810 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1d820 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1d830 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
1d840 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1d850 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d860 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65  r;.  pCx->isOrde
1d870 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1d880 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1d890 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1d8a0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1d8b0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1d8c0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1d8d0 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1d8e0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1d8f0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1d900 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1d910 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1d920 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1d930 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1d940 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1d950 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1d960 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1d970 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1d980 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1d990 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1d9a0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1d9b0 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1d9c0 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1d9d0 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1d9e0 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1d9f0 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1da00 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1da10 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1da20 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1da30 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1da40 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1da50 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1da60 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1da70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1da80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1da90 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1daa0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1dab0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1dac0 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
1dad0 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70  SORTER);.  if( p
1dae0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1daf0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1db00 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1db10 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1db20 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1db30 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1db40 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1db50 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1db60 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1db70 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1db80 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1db90 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  Cx);.  if( rc ) 
1dba0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1dbb0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1dbc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1dbd0 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
1dbe0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1dbf0 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
1dc00 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
1dc10 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
1dc20 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
1dc30 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
1dc40 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
1dc50 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
1dc60 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
1dc70 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1dc80 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
1dc90 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
1dca0 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
1dcb0 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
1dcc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1dcd0 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
1dce0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1dcf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1dd00 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1dd10 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1dd20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1dd30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1dd40 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
1dd50 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
1dd60 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
1dd70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1dd80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1dd90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1dda0 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1ddb0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1ddc0 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  : P3 columns in 
1ddd0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  r[P2].**.** Open
1dde0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1ddf0 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1de00 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1de10 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1de20 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1de30 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1de40 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
1de50 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1de60 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1de70 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1de80 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1de90 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1dea0 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1deb0 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1dec0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1ded0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1dee0 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1def0 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1df00 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1df10 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1df20 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1df30 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1df40 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1df50 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1df60 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1df70 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1df80 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1df90 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1dfa0 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1dfb0 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1dfc0 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1dfd0 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1dfe0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1dff0 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1e000 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1e010 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1e020 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1e030 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1e040 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1e050 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1e060 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1e070 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e080 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1e090 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
1e0a0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1e0b0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1e0c0 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1e0d0 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  , CURTYPE_PSEUDO
1e0e0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1e0f0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1e100 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1e110 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73 65  1;.  pCx->uc.pse
1e120 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1e130 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1e140 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73  Table = 1;.  ass
1e150 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1e160 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1e170 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1e180 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1e190 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1e1a0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1e1b0 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1e1c0 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1e1d0 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1e1e0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1e1f0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1e200 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1e210 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1e220 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1e230 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1e240 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1e250 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1e260 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1e270 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1e280 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
1e290 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1e2a0 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1e2b0 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  SK./* Opcode: Co
1e2c0 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a  lumnsUsed P1 * *
1e2d0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1e2e0 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f   opcode (which o
1e2f0 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51  nly exists if SQ
1e300 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65  Lite was compile
1e310 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  d with.** SQLITE
1e320 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
1e330 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69  SED_MASK) identi
1e340 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d  fies which colum
1e350 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62  ns of the.** tab
1e360 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20  le or index for 
1e370 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73  cursor P1 are us
1e380 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d  ed.  P4 is a 64-
1e390 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28  bit integer.** (
1e3a0 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69  P4_INT64) in whi
1e3b0 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20  ch the first 63 
1e3c0 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72  bits are one for
1e3d0 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20   each of the.** 
1e3e0 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73  first 63 columns
1e3f0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
1e400 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20   index that are 
1e410 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a  actually used.**
1e420 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20   by the cursor. 
1e430 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   The high-order 
1e440 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e  bit is set if an
1e450 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a  y column after.*
1e460 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73  * the 64th is us
1e470 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ed..*/.case OP_C
1e480 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20  olumnsUsed: {.  
1e490 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e4a0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1e4b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1e4c0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
1e4d0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
1e4e0 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65  );.  pC->maskUse
1e4f0 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e  d = *(u64*)pOp->
1e500 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
1e510 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
1e520 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1e530 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1e540 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1e550 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1e560 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e570 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1e580 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1e590 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1e5a0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1e5b0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1e5c0 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1e5d0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e5e0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1e5f0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1e600 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e610 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1e620 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1e630 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1e640 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1e650 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1e660 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1e670 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1e680 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1e690 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1e6a0 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1e6b0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1e6c0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1e6d0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1e6e0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1e6f0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1e700 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1e710 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1e720 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1e730 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1e740 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
1e750 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
1e760 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
1e770 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
1e780 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1e790 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
1e7a0 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
1e7b0 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
1e7c0 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
1e7d0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1e7e0 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
1e7f0 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
1e800 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
1e810 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
1e820 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20  wed by an IdxLE 
1e830 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
1e840 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
1e850 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63  ** The IdxLE opc
1e860 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
1e870 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
1e880 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
1e890 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70   the.** IdxLE op
1e8a0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1e8b0 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
1e8c0 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
1e8d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e8e0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e8f0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e900 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1e910 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1e920 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1e930 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1e940 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e950 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e960 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e970 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1e980 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1e990 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e9a0 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1e9b0 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
1e9c0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54  * Opcode: SeekGT
1e9d0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1e9e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e9f0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1ea00 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ea10 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1ea20 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1ea30 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1ea40 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1ea50 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1ea60 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1ea70 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ea80 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1ea90 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1eaa0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1eab0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1eac0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1ead0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1eae0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1eaf0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1eb00 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1eb10 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1eb20 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1eb30 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1eb40 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1eb50 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1eb60 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1eb70 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65  o records greate
1eb80 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  r than .** the k
1eb90 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1eba0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1ebb0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1ebc0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1ebd0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1ebe0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1ebf0 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
1ec00 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
1ec10 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
1ec20 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
1ec30 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1ec40 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1ec50 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
1ec60 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a   not Prev..**.**
1ec70 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1ec80 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1ec90 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Lt, SeekGe, Seek
1eca0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1ecb0 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33   SeekLT P1 P2 P3
1ecc0 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73   P4 * .** Synops
1ecd0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1ece0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1ecf0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1ed00 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1ed10 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1ed20 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1ed30 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1ed40 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1ed50 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1ed60 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1ed70 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1ed80 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1ed90 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1eda0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1edb0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1edc0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1edd0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1ede0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1edf0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1ee00 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1ee10 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1ee20 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1ee30 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1ee40 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1ee50 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1ee60 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1ee70 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1ee80 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1ee90 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1eea0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1eeb0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1eec0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1eed0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1eee0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1eef0 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1ef00 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1ef10 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1ef20 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1ef30 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1ef40 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1ef50 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1ef60 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1ef70 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1ef80 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1ef90 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50  : SeekLE P1 P2 P
1efa0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1efb0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1efc0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1efd0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1efe0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1eff0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1f000 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1f010 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1f020 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1f030 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1f040 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1f050 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1f060 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1f070 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1f080 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1f090 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1f0a0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1f0b0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1f0c0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1f0d0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1f0e0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1f0f0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1f100 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1f110 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1f120 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1f130 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1f140 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
1f150 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1f160 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1f170 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1f180 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1f190 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1f1a0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1f1b0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1f1c0 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
1f1d0 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
1f1e0 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
1f1f0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
1f200 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1f210 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1f220 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1f230 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
1f240 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
1f250 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1f260 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1f270 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1f280 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1f290 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1f2a0 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1f2b0 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1f2c0 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1f2d0 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1f2e0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1f2f0 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1f300 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1f310 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1f320 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1f330 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1f340 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  GE opcode with t
1f350 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1f360 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20  s..** The IdxGE 
1f370 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1f380 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1f390 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1f3a0 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45  but the.** IdxGE
1f3b0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1f3c0 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1f3d0 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1f3e0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ns..**.** See al
1f3f0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1f400 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1f410 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1f420 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1f430 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1f440 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1f450 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1f460 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1f470 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1f480 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1f490 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1f4a0 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1f4b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1f4c0 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1f4d0 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
1f4e0 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e  n result */.  in
1f4f0 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  t oc;           
1f500 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20   /* Opcode */.  
1f510 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
1f520 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72     /* The cursor
1f530 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e   to seek */.  Un
1f540 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20  packedRecord r; 
1f550 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73   /* The key to s
1f560 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  eek for */.  int
1f570 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
1f580 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1f590 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69  umns or fields i
1f5a0 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69  n the key */.  i
1f5b0 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
1f5c0 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1f5d0 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1f5e0 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79   */.  int eqOnly
1f5f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ;        /* Only
1f600 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d   interested in =
1f610 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20  = results */..  
1f620 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f630 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f640 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1f650 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
1f660 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1f670 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1f680 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1f690 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
1f6a0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1f6b0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
1f6c0 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d  rt( OP_SeekLE ==
1f6d0 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a   OP_SeekLT+1 );.
1f6e0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1f6f0 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGE == OP_SeekLT
1f700 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
1f710 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f  OP_SeekGT == OP_
1f720 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73  SeekLT+3 );.  as
1f730 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
1f740 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
1f750 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
1f760 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70  =0 );.  oc = pOp
1f770 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e  ->opcode;.  eqOn
1f780 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75  ly = 0;.  pC->nu
1f790 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
1f7a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1f7b0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1f7c0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1f7d0 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  f..  if( pC->isT
1f7e0 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
1f7f0 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
1f800 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65   flag is only se
1f810 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  t on index curso
1f820 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  rs */.    assert
1f830 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1f840 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
1f850 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
1f860 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 20 29 3b  E_SEEK_EQ)==0 );
1f870 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70  ..    /* The inp
1f880 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1f890 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1f8a0 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1f8b0 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1f8c0 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1f8d0 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1f8e0 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1f8f0 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1f900 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65  o.    ** the see
1f910 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74  k, so convert it
1f920 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20  . */.    pIn3 = 
1f930 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1f940 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1f950 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
1f960 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
1f970 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
1f980 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
1f990 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  cAffinity(pIn3, 
1f9a0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b  0);.    }.    iK
1f9b0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1f9c0 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a  IntValue(pIn3);.
1f9d0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50  .    /* If the P
1f9e0 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1f9f0 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1fa00 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1fa10 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f  ithout.    ** lo
1fa20 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
1fa30 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20  n, then special 
1fa40 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65  processing is re
1fa50 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20  quired... */.   
1fa60 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1fa70 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
1fa80 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
1fa90 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1faa0 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
1fab0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1fac0 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
1fad0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1fae0 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75  any kind of a nu
1faf0 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mber,.        **
1fb00 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69   then the seek i
1fb10 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20  s not possible, 
1fb20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  so jump to P2 */
1fb30 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61  .        VdbeBra
1fb40 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67  nchTaken(1,2); g
1fb50 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
1fb60 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1fb70 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1fb80 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1fb90 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
1fba0 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
1fbb0 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1fbc0 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1fbd0 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
1fbe0 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
1fbf0 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
1fc00 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
1fc10 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
1fc20 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
1fc30 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
1fc40 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
1fc50 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
1fc60 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
1fc70 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
1fc80 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
1fc90 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
1fca0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1fcb0 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f  f( pIn3->u.r<(do
1fcc0 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
1fcd0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1fce0 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGE==(OP_Seek
1fcf0 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GT-1) );.       
1fd00 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1fd10 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31  LT==(OP_SeekLE-1
1fd20 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1fd30 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20  ert( (OP_SeekLE 
1fd40 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1fd50 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1fd60 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
1fd70 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
1fd80 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
1fd90 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20  1) ) oc--;.     
1fda0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1fdb0 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1fdc0 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65  n iKey is smalle
1fdd0 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1fde0 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1fdf0 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1fe00 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c  stitute <= for <
1fe10 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20   and > for >=.  
1fe20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  */.      else if
1fe30 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75  ( pIn3->u.r>(dou
1fe40 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1fe50 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1fe60 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
1fe70 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
1fe80 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1fe90 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
1fea0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1feb0 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
1fec0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1fed0 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
1fee0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1fef0 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1ff00 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1ff10 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
1ff20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20  }.    } .    rc 
1ff30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1ff40 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1ff50 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
1ff60 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1ff70 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  es);.    pC->mov
1ff80 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
1ff90 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
1ffa0 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69  _Delete */.    i
1ffb0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1ffc0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1ffd0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ffe0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  r;.    }.  }else
1fff0 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63  {.    /* For a c
20000 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42  ursor with the B
20010 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e  TREE_SEEK_EQ hin
20020 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53  t, only the OP_S
20030 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a  eekGE and.    **
20040 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64   OP_SeekLE opcod
20050 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20  es are allowed, 
20060 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62  and these must b
20070 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
20080 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79  llowed.    ** by
20090 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20   an OP_IdxGT or 
200a0 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c  OP_IdxLT opcode,
200b0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77   respectively, w
200c0 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
200d0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
200e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
200f0 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75  sorHasHint(pC->u
20100 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
20110 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20  _SEEK_EQ) ){.   
20120 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20     eqOnly = 1;. 
20130 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20140 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
20150 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  kGE || pOp->opco
20160 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  de==OP_SeekLE );
20170 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
20180 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
20190 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
201a0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
201b0 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  T );.      asser
201c0 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f  t( pOp[1].p1==pO
201d0 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20  p[0].p1 );.     
201e0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
201f0 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b  p2==pOp[0].p2 );
20200 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
20210 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d  Op[1].p3==pOp[0]
20220 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p3 );.      ass
20230 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69  ert( pOp[1].p4.i
20240 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b  ==pOp[0].p4.i );
20250 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65  .    }..    nFie
20260 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
20270 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20280 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
20290 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  2 );.    assert(
202a0 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
202b0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
202c0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
202d0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
202e0 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20  nField;..    /* 
202f0 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66  The next line of
20300 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61   code computes a
20310 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20  s follows, only 
20320 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20  faster:.    **  
20330 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
20340 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GT || oc==OP_See
20350 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20  kLE ){.    **   
20360 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
20370 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65   -1;.    **   }e
20380 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
20390 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b  r.default_rc = +
203a0 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  1;.    **   }.  
203b0 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75    */.    r.defau
203c0 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f  lt_rc = ((1 & (o
203d0 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20  c - OP_SeekLT)) 
203e0 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20  ? -1 : +1);.    
203f0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
20400 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekGT || r.defau
20410 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
20420 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
20430 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61  SeekLE || r.defa
20440 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
20450 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
20460 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66  _SeekGE || r.def
20470 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20  ault_rc==+1 );. 
20480 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
20490 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65  P_SeekLT || r.de
204a0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
204b0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
204c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
204d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
204e0 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
204f0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
20500 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
20510 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
20520 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
20530 64 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e  dif.    r.eqSeen
20540 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73   = 0;.    rc = s
20550 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
20560 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
20570 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  .pCursor, &r, 0,
20580 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
20590 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
205a0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
205b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
205c0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
205d0 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53   eqOnly && r.eqS
205e0 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  een==0 ){.      
205f0 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29  assert( res!=0 )
20600 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65  ;.      goto see
20610 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  k_not_found;.   
20620 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66   }.  }.  pC->def
20630 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20640 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
20650 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20660 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
20670 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
20680 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
20690 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
206a0 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
206b0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
206c0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
206d0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
206e0 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
206f0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
20700 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
20710 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
20720 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
20730 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
20740 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
20750 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20760 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
20770 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
20780 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
20790 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
207a0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
207b0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
207c0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
207d0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
207e0 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
207f0 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
20800 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
20810 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20820 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
20830 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
20840 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
20850 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
20860 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20870 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
20880 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73  se{.      /* res
20890 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
208a0 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
208b0 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
208c0 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a  Check to.      *
208d0 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
208e0 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
208f0 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20   */.      res = 
20900 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
20910 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
20920 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f  .    }.  }.seek_
20930 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73  not_found:.  ass
20940 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
20950 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
20960 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
20970 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
20980 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
20990 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f  .  }else if( eqO
209a0 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72  nly ){.    asser
209b0 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
209c0 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
209d0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
209e0 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70  IdxGT );.    pOp
209f0 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20  ++; /* Skip the 
20a00 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49  OP_IdxLt or OP_I
20a10 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77  dxGT that follow
20a20 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  s */.  }.  break
20a30 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20a40 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
20a50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
20a60 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
20a70 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
20a80 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
20a90 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
20aa0 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
20ab0 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
20ac0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
20ad0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
20ae0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
20af0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
20b00 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
20b10 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
20b20 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
20b30 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
20b40 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
20b50 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
20b60 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
20b70 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
20b80 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
20b90 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
20ba0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
20bb0 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
20bc0 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
20bd0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
20be0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
20bf0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
20c00 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a  ere it can be.**
20c10 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65   advanced in the
20c20 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69   forward directi
20c30 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e  on.  The Next in
20c40 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77  struction will w
20c50 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20  ork,.** but not 
20c60 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63  the Prev instruc
20c70 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
20c80 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
20c90 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45  NoConflict, NotE
20ca0 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f  xists. SeekGe.*/
20cb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
20cc0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
20cd0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
20ce0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
20cf0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
20d00 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
20d10 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
20d20 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
20d30 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
20d40 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
20d50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
20d60 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
20d70 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
20d80 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
20d90 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
20da0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
20db0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
20dc0 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
20dd0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
20de0 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
20df0 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
20e00 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
20e10 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
20e20 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
20e30 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
20e40 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
20e50 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
20e60 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
20e70 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
20e80 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
20e90 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
20ea0 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
20eb0 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
20ec0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
20ed0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
20ee0 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
20ef0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
20f00 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
20f10 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
20f20 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
20f30 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
20f40 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
20f50 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
20f60 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
20f70 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
20f80 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
20f90 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
20fa0 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69  Exists, NoConfli
20fb0 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ct.*/./* Opcode:
20fc0 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50   NoConflict P1 P
20fd0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
20fe0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
20ff0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
21000 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
21010 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
21020 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
21030 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
21040 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
21050 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
21060 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
21070 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
21080 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
21090 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
210a0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
210b0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
210c0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
210d0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
210e0 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  d P4.** contains
210f0 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c   any NULL value,
21100 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
21110 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c  y to P2.  If all
21120 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a   terms of the.**
21130 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d   record are not-
21140 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63  NULL then a chec
21150 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74  k is done to det
21160 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f  ermine if any ro
21170 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69  w in the.** P1 i
21180 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61  ndex btree has a
21190 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72   matching key pr
211a0 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20  efix.  If there 
211b0 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20  are no matches, 
211c0 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  jump.** immediat
211d0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ely to P2.  If t
211e0 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c  here is a match,
211f0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e   fall through an
21200 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a  d leave the P1.*
21210 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  * cursor pointin
21220 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e  g to the matchin
21230 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  g row..**.** Thi
21240 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69  s opcode is simi
21250 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75  lar to OP_NotFou
21260 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65  nd with the exce
21270 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a  ptions that the.
21280 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77  ** branch is alw
21290 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79  ays taken if any
212a0 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61   part of the sea
212b0 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73  rch key input is
212c0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   NULL..**.** Thi
212d0 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
212e0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
212f0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
21300 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
21310 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
21320 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
21330 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
21340 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
21350 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
21360 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
21370 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
21380 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
21390 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f  Found, Found, No
213a0 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20  tExists.*/.case 
213b0 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20  OP_NoConflict:  
213c0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
213d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f  */.case OP_NotFo
213e0 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75  und:       /* ju
213f0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
21400 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20  OP_Found: {     
21410 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
21420 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79  */.  int already
21430 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 74 61  Exists;.  int ta
21440 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69  keJump;.  int ii
21450 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
21460 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
21470 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20   char *pFree;.  
21480 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
21490 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63  pIdxKey;.  Unpac
214a0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63  kedRecord r;.  c
214b0 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55  har aTempRec[ROU
214c0 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63  ND8(sizeof(Unpac
214d0 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69  kedRecord)) + si
214e0 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d  zeof(Mem)*4 + 7]
214f0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
21500 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d  _TEST.  if( pOp-
21510 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f  >opcode!=OP_NoCo
21520 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33  nflict ) sqlite3
21530 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
21540 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74  #endif..  assert
21550 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
21560 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
21570 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
21580 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
21590 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
215a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
215b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
215c0 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
215d0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
215e0 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
215f0 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70  code;.#endif.  p
21600 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
21610 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
21620 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
21630 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
21640 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
21650 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
21660 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21670 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65  ble==0 );.  pFre
21680 65 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  e = 0;.  if( pOp
21690 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
216a0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
216b0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
216c0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
216d0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e  Op->p4.i;.    r.
216e0 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66  aMem = pIn3;.#if
216f0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21700 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
21710 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
21720 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
21730 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
21740 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20  Mem[ii]) );.    
21750 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d 65    assert( (r.aMe
21760 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
21770 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e  M_Zero)==0 || r.
21780 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b  aMem[ii].n==0 );
21790 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20  .      if( ii ) 
217a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
217b0 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d  Op->p3+ii, &r.aM
217c0 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23  em[ii]);.    }.#
217d0 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b 65  endif.    pIdxKe
217e0 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b  y = &r;.  }else{
217f0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
21800 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
21810 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20  npackedRecord(. 
21820 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49         pC->pKeyI
21830 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73  nfo, aTempRec, s
21840 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c  izeof(aTempRec),
21850 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a 20   &pFree.    );. 
21860 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
21870 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
21880 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
21890 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
218a0 6c 6f 62 20 29 3b 0a 20 20 20 20 28 76 6f 69 64  lob );.    (void
218b0 29 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33  )ExpandBlob(pIn3
218c0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
218d0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
218e0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
218f0 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
21900 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
21910 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
21920 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75  rc = 0;.  takeJu
21930 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  mp = 0;.  if( pO
21940 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
21950 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
21960 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
21970 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
21980 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
21990 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
219a0 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
219b0 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
219c0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
219d0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
219e0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
219f0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
21a00 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c  i<pIdxKey->nFiel
21a10 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
21a20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65  if( pIdxKey->aMe
21a30 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
21a40 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
21a50 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a    takeJump = 1;.
21a60 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
21a70 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
21a80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
21a90 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
21aa0 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
21ab0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
21ac0 2c 20 26 72 65 73 29 3b 0a 20 20 73 71 6c 69 74  , &res);.  sqlit
21ad0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 46 72  e3DbFree(db, pFr
21ae0 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ee);.  if( rc!=S
21af0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
21b00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21b10 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
21b20 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
21b30 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  res;.  alreadyEx
21b40 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
21b50 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
21b60 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73   1-alreadyExists
21b70 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
21b80 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
21b90 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
21ba0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
21bb0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
21bc0 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
21bd0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
21be0 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30  alreadyExists!=0
21bf0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72  ,2);.    if( alr
21c00 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
21c10 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
21c20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
21c30 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a  ranchTaken(takeJ
21c40 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73  ump||alreadyExis
21c50 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts==0,2);.    if
21c60 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61  ( takeJump || !a
21c70 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67  lreadyExists ) g
21c80 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
21c90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21ca0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52  /* Opcode: SeekR
21cb0 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
21cc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
21cd0 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
21ce0 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
21cf0 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
21d00 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
21d10 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
21d20 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
21d30 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 33    If register P3
21d40 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
21d50 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  n an integer or 
21d60 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a  if P1 does not.*
21d70 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  * contain a reco
21d80 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
21d90 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
21da0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a  iately to P2.  .
21db0 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  ** Or, if P2 is 
21dc0 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  0, raise an SQLI
21dd0 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72  TE_CORRUPT error
21de0 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e  . If P1 does con
21df0 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64  tain.** a record
21e00 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
21e10 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
21e20 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
21e30 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
21e40 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
21e50 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
21e60 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
21e70 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78  .** The OP_NotEx
21e80 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66  ists opcode perf
21e90 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
21ea0 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74  eration, but wit
21eb0 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a  h OP_NotExists.*
21ec0 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  * the P3 registe
21ed0 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e  r must be guaran
21ee0 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  teed to contain 
21ef0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
21f00 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20  .  With this.** 
21f10 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72  opcode, register
21f20 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f   P3 might not co
21f30 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
21f40 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
21f50 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
21f60 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
21f70 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
21f80 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
21f90 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
21fa0 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
21fb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
21fc0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
21fd0 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
21fe0 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
21ff0 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
22000 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
22010 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
22020 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
22030 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
22040 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
22050 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
22060 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
22070 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
22080 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
22090 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f  ct, SeekRowid.*/
220a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
220b0 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
220c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
220d0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
220e0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
220f0 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
22100 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
22110 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
22120 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
22130 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
22140 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
22150 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
22160 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
22170 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
22180 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
22190 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69  ly to P2.  Or, i
221a0 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
221b0 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f   an.** SQLITE_CO
221c0 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20  RRUPT error. If 
221d0 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
221e0 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
221f0 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
22200 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
22210 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
22220 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
22230 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
22240 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
22250 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
22260 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63  OP_SeekRowid opc
22270 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
22280 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
22290 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20  but also allows 
222a0 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74  the.** P3 regist
222b0 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20  er to contain a 
222c0 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75  non-integer valu
222d0 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  e, in which case
222e0 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20   the jump is.** 
222f0 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54  always taken.  T
22300 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69  his opcode requi
22310 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77 61  res that P3 alwa
22320 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ys contain an in
22330 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  teger..**.** The
22340 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63   OP_NotFound opc
22350 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
22360 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
22370 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a  on index btrees.
22380 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61  ** (with arbitra
22390 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b  ry multi-value k
223a0 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  eys)..**.** This
223b0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
223c0 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
223d0 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
223e0 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64  nnot be advanced
223f0 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69  .** in either di
22400 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
22410 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
22420 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f  xt and Prev opco
22430 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20  des will.** not 
22440 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  work following t
22450 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
22460 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
22470 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  d, NotFound, NoC
22480 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77  onflict, SeekRow
22490 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  id.*/.case OP_Se
224a0 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ekRowid: {      
224b0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
224c0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
224d0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
224e0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
224f0 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
22500 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
22510 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
22520 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
22530 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
22540 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
22550 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n3, SQLITE_AFF_N
22560 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
22570 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  );.    if( (pIn3
22580 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
22590 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  t)==0 ) goto jum
225a0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f  p_to_p2;.  }.  /
225b0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
225c0 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  nto OP_NotExists
225d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45   */.case OP_NotE
225e0 78 69 73 74 73 3a 20 20 20 20 20 20 20 20 20 20  xists:          
225f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
22600 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
22610 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
22620 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
22630 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
22640 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22650 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22660 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
22670 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22680 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22690 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
226a0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
226b0 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e  >seekOp = 0;.#en
226c0 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43  dif.  assert( pC
226d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
226e0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
226f0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
22700 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
22710 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
22720 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
22730 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  =0 );.  res = 0;
22740 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e  .  iKey = pIn3->
22750 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  u.i;.  rc = sqli
22760 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
22770 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
22780 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
22790 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
227a0 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
227b0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  =0 );.  pC->move
227c0 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
227d0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
227e0 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e  Delete */.  pC->
227f0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
22800 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22810 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22820 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
22830 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  to = 0;.  VdbeBr
22840 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
22850 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ,2);.  pC->seekR
22860 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69  esult = res;.  i
22870 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
22880 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22890 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66  ITE_OK );.    if
228a0 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
228b0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
228c0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
228d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
228e0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
228f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
22900 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
22910 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
22920 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22930 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
22940 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
22950 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
22960 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a  ursor[P1].ctr++.
22970 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
22980 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
22990 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
229a0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
229b0 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
229c0 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
229d0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
229e0 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
229f0 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
22a00 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
22a10 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
22a20 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
22a30 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
22a40 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
22a50 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
22a60 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22a70 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22a80 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
22a90 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22aa0 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  1]!=0 );.  asser
22ab0 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
22ac0 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d  >p1]->eCurType!=
22ad0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
22ae0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
22af0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
22b00 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
22b10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22b20 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
22b30 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
22b40 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
22b50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
22b60 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
22b70 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
22b80 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
22b90 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
22ba0 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
22bb0 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
22bc0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
22bd0 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
22be0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
22bf0 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
22c00 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
22c10 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
22c20 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
22c30 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
22c40 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
22c50 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
22c60 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
22c70 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
22c80 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
22c90 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
22ca0 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
22cb0 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
22cc0 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
22cd0 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
22ce0 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
22cf0 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
22d00 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
22d10 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
22d20 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
22d30 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
22d40 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
22d50 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
22d60 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
22d70 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
22d80 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
22d90 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
22da0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
22db0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
22dc0 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
22dd0 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
22de0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
22df0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
22e00 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
22e10 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
22e20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
22e30 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20  */.  i64 v;     
22e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22e50 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
22e60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
22e70 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73  ;        /* Curs
22e80 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67  or of table to g
22e90 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64  et the new rowid
22ea0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22ec0 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c  Result of an sql
22ed0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20  ite3BtreeLast() 
22ee0 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
22f00 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20  ounter to limit 
22f10 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
22f20 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20  arches */.  Mem 
22f30 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
22f40 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
22f50 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72  olding largest r
22f60 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43  owid for AUTOINC
22f70 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65  REMENT */.  Vdbe
22f80 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
22f90 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65     /* Root frame
22fa0 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76   of VDBE */..  v
22fb0 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b   = 0;.  res = 0;
22fc0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
22fd0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
22fe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22ff0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23000 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
23010 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
23020 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23030 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
23040 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
23050 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
23060 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
23070 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
23080 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  0 );.  {.    /* 
23090 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
230a0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
230b0 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
230c0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
230d0 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
230e0 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
230f0 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
23100 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
23110 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
23120 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
23130 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
23140 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
23150 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
23160 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
23170 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
23180 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
23190 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
231a0 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
231b0 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
231c0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
231d0 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
231e0 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
231f0 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
23200 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
23210 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
23220 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
23230 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
23240 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
23250 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
23260 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
23270 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
23280 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
23290 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
232a0 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
232b0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
232c0 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
232d0 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
232e0 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
232f0 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   times..    */. 
23300 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
23310 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65  sTable );..#ifde
23320 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
23330 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
23340 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
23350 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
23360 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
23370 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
23380 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
23390 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
233a0 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
233b0 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
233c0 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
233d0 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
233e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
233f0 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
23400 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
23410 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
23420 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
23430 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
23440 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
23450 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
23460 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
23470 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
23480 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
23490 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
234a0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
234b0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
234c0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
234d0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
234e0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
234f0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
23500 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
23510 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23520 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
23530 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
23540 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50   v = 1;   /* IMP
23550 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20  : R-61914-48074 
23560 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
23570 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23580 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
23590 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63  orIsValid(pC->uc
235a0 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  .pCursor) );.   
235b0 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
235c0 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
235d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
235e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d  .        if( v>=
235f0 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
23600 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
23610 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
23620 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
23630 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
23640 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
23650 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
23660 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
23670 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23680 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
23690 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  NT.    if( pOp->
236a0 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  p3 ){.      /* A
236b0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
236c0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
236d0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61  cell. */.      a
236e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
236f0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
23700 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
23710 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
23720 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
23730 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
23740 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
23750 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  );.        /* As
23760 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
23770 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
23780 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
23790 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
237a0 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
237b0 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
237c0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
237d0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65  p->p3];.      }e
237e0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
237f0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
23800 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
23810 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
23820 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23830 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
23840 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
23850 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
23860 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
23870 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
23880 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b  Change(p, pMem);
23890 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
238a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
238b0 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
238c0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
238d0 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
238e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
238f0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
23900 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73  pMem);.      ass
23910 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
23920 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
23930 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
23940 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
23950 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65  */.      if( pMe
23960 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
23970 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
23980 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
23990 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
239a0 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
239b0 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a  -12275-61338 */.
239c0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
239d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
239e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
239f0 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
23a00 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
23a10 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20  pMem->u.i + 1;. 
23a20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65       }.      pMe
23a30 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
23a40 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  }.#endif.    if(
23a50 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
23a60 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  wid ){.      /* 
23a70 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
23a80 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31  F: R-07677-41881
23a90 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   If the largest 
23aa0 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74  ROWID is equal t
23ab0 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c  o the.      ** l
23ac0 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
23ad0 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32  integer (9223372
23ae0 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68  036854775807) th
23af0 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
23b00 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20        ** engine 
23b10 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70  starts picking p
23b20 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74  ositive candidat
23b30 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64  e ROWIDs at rand
23b40 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a  om until.      *
23b50 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74  * it finds one t
23b60 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69  hat is not previ
23b70 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20  ously used. */. 
23b80 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
23b90 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
23ba0 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
23bb0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
23bc0 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23be0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
23bf0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
23c00 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74  le. */.      cnt
23c10 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a   = 0;.      do{.
23c20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
23c30 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
23c40 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
23c50 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
23c60 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a  ID>>1); v++;  /*
23c70 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69   Ensure that v i
23c80 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
23c90 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68  ero */.      }wh
23ca0 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c  ile(  ((rc = sql
23cb0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
23cc0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
23cd0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
23ce0 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
23d20 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
23d30 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
23d40 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
23d50 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20   (++cnt<100));. 
23d60 20 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f       if( rc ) go
23d70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23d80 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28  error;.      if(
23d90 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
23da0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
23db0 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
23dc0 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a  -38219-53002 */.
23dd0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
23de0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
23df0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
23e00 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f  ssert( v>0 );  /
23e10 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33  * EV: R-40812-03
23e20 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  570 */.    }.   
23e30 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23e40 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
23e50 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23e60 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
23e70 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
23e80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23e90 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50  Opcode: Insert P
23ea0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
23eb0 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
23ec0 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50  y=r[P3] data=r[P
23ed0 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  2].**.** Write a
23ee0 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
23ef0 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
23f00 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
23f10 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
23f20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
23f30 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
23f40 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
23f50 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
23f60 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
23f70 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
23f80 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62  e value MEM_Blob
23f90 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
23fa0 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
23fb0 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
23fc0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
23fd0 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
23fe0 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74  .** be a MEM_Int
23ff0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
24000 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
24010 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
24020 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
24030 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
24040 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
24050 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49  herwise not).  I
24060 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53  f the OPFLAG_LAS
24070 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50  TROWID flag of P
24080 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65  5 is set,.** the
24090 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65  n rowid is store
240a0 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74  d for subsequent
240b0 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a   return by the.*
240c0 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  * sqlite3_last_i
240d0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
240e0 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73  nction (otherwis
240f0 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69  e it is unmodifi
24100 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ed)..**.** If th
24110 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
24120 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
24130 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20  5 is set and if 
24140 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
24150 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f   the last seek o
24160 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74  peration (OP_Not
24170 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 53 65 65  Exists or OP_See
24180 6b 52 6f 77 69 64 29 20 77 61 73 20 61 20 73 75  kRowid) was a su
24190 63 63 65 73 73 2c 0a 2a 2a 20 74 68 65 6e 20 74  ccess,.** then t
241a0 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
241b0 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
241c0 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
241d0 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
241e0 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
241f0 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
24200 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
24210 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
24220 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
24230 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
24240 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
24250 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
24260 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
24270 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20  ** OP_SeekRowid 
24280 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
24290 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
242a0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
242b0 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
242c0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
242d0 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
242e0 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
242f0 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
24300 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
24310 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
24320 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
24330 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
24340 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
24350 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
24360 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
24370 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
24380 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
24390 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
243a0 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
243b0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
243c0 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
243d0 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
243e0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
243f0 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
24400 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
24410 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  t to a Table str
24420 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62  ucture, or may b
24430 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
24440 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74   .** not NULL, t
24450 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
24460 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70  ook (sqlite3.xUp
24470 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
24480 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c   invoked .** fol
24490 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
244a0 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
244b0 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
244c0 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
244d0 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
244e0 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
244f0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
24500 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
24510 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
24520 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
24530 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
24540 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
24550 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
24560 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
24570 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
24580 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
24590 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
245a0 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
245b0 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
245c0 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
245d0 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
245e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
245f0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
24600 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
24610 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
24620 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
24630 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
24640 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
24650 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
24660 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
24670 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  is: intkey=P3 da
24680 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
24690 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
246a0 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
246b0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
246c0 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
246d0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
246e0 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
246f0 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
24700 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
24710 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
24720 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
24730 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
24740 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
24750 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
24760 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
24770 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
24780 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
24790 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
247a0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
247b0 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
247c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62   record */.  Vdb
247d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
247e0 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
247f0 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
24800 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
24810 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
24820 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
24830 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
24840 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
24850 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
24860 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
24870 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
24880 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
24890 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
248a0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
248b0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74       /* Table st
248c0 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20 62  ructure - used b
248d0 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72 65  y update and pre
248e0 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f  -update hooks */
248f0 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20  .  int op;      
24900 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66       /* Opcode f
24910 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20  or update hook: 
24920 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72  SQLITE_UPDATE or
24930 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a   SQLITE_INSERT *
24940 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64  /.  BtreePayload
24950 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64   x;   /* Payload
24960 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
24970 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20 20  */..  op = 0;.  
24980 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f  pData = &aMem[pO
24990 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
249a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
249b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
249c0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
249d0 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61  memIsValid(pData
249e0 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
249f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24a00 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24a10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24a20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
24a30 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
24a40 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
24a50 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
24a60 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
24a70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
24a80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
24a90 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  LE || pOp->p4typ
24aa0 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a  e>=P4_STATIC );.
24ab0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
24ac0 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
24ad0 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
24ae0 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
24af0 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
24b00 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
24b10 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
24b20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
24b30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
24b40 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
24b50 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
24b60 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
24b70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79  Key);.    x.nKey
24b80 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
24b90 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
24ba0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
24bb0 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
24bc0 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70      x.nKey = pOp
24bd0 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
24be0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
24bf0 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
24c00 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
24c10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
24c20 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
24c30 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
24c40 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20  =0 );.    zDb = 
24c50 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
24c60 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70  .zDbSName;.    p
24c70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
24c80 61 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ab;.    assert( 
24c90 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
24ca0 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
24cb0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
24cc0 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
24cd0 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
24ce0 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c 73  _INSERT);.  }els
24cf0 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  e{.    pTab = 0;
24d00 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
24d10 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69 6c   Silence a comil
24d20 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
24d30 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20     zDb = 0;  /* 
24d40 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
24d50 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
24d60 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a  warning. */.  }.
24d70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
24d80 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
24d90 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
24da0 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
24db0 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  hook, if any */.
24dc0 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70    if( db->xPreUp
24dd0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20  dateCallback .  
24de0 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   && pOp->p4type=
24df0 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20  =P4_TABLE.   && 
24e00 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  !(pOp->p5 & OPFL
24e10 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20 29  AG_ISUPDATE).  )
24e20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
24e30 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
24e40 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53  , pC, SQLITE_INS
24e50 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20  ERT, zDb, pTab, 
24e60 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32 29  x.nKey, pOp->p2)
24e70 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
24e80 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
24e90 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
24ea0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
24eb0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
24ec0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
24ed0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
24ee0 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b  lastRowid = x.nK
24ef0 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
24f00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
24f10 6c 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74 61  l ){.    x.pData
24f20 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61 74   = 0;.    x.nDat
24f30 61 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  a = 0;.  }else{.
24f40 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
24f50 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
24f60 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
24f70 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 70  .    x.pData = p
24f80 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e  Data->z;.    x.n
24f90 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b  Data = pData->n;
24fa0 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
24fb0 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
24fc0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
24fd0 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
24fe0 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
24ff0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
25000 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
25010 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74    x.nZero = pDat
25020 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
25030 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f  lse{.    x.nZero
25040 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b   = 0;.  }.  x.pK
25050 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  ey = 0;.  rc = s
25060 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
25070 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
25080 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20 20  , &x,.          
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250a0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
250b0 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65  G_APPEND)!=0, se
250c0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
250d0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
250e0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
250f0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
25100 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
25110 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
25120 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
25130 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29  d. */.  if( rc )
25140 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25150 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
25160 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
25170 61 63 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20 20  ack && op ){.   
25180 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
25190 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
251a0 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54  Arg, op, zDb, pT
251b0 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65  ab->zName, x.nKe
251c0 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  y);.  }.  break;
251d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
251e0 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50  elete P1 P2 P3 P
251f0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  4 P5.**.** Delet
25200 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
25210 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
25220 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
25230 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
25240 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53   If the OPFLAG_S
25250 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
25260 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  of the P5 parame
25270 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ter is set, then
25280 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77  .** the cursor w
25290 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
252a0 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20  ting at  either 
252b0 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
252c0 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
252d0 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
252e0 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
252f0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
25300 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
25310 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
25320 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
25330 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41  ll be a no-op. A
25340 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74  s a result, in t
25350 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69  his case.** it i
25360 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61  s ok to delete a
25370 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
25380 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e  hin a Next loop.
25390 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53   If .** OPFLAG_S
253a0 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
253b0 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20  of P5 is clear, 
253c0 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
253d0 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20  will be.** left 
253e0 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
253f0 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  state..**.** If 
25400 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  the OPFLAG_AUXDE
25410 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20  LETE bit is set 
25420 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69  on P5, that indi
25430 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
25440 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66  ** delete one of
25450 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61   several associa
25460 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e  ted with deletin
25470 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  g a table row an
25480 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73  d all its.** ass
25490 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e  ociated index en
254a0 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20  tries.  Exactly 
254b0 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c  one of those del
254c0 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69  etes is the "pri
254d0 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e  mary".** delete.
254e0 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65    The others are
254f0 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46   all on OPFLAG_F
25500 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73  ORDELETE cursors
25510 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20   or else are.** 
25520 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20  marked with the 
25530 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a  AUXDELETE flag..
25540 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
25550 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
25560 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e   of P2 (NB: P2 n
25570 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74  ot P5) is set, t
25580 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63  hen the row.** c
25590 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69  hange count is i
255a0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
255b0 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
255c0 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
255d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
255e0 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
255f0 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
25600 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
25610 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
25620 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
25630 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
25640 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68  le object. In th
25650 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a  is case either .
25660 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72  ** the update or
25670 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
25680 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62  , or both, may b
25690 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50  e invoked. The P
256a0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a  1 cursor must.**
256b0 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
256c0 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e  ioned using OP_N
256d0 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
256e0 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
256f0 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69  pcode in .** thi
25700 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63  s case. Specific
25710 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20  ally, if one is 
25720 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20  configured, the 
25730 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20  pre-update hook 
25740 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69  is .** invoked i
25750 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
25760 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  . The update-hoo
25770 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20  k is invoked if 
25780 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
25790 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74  d, .** P4 is not
257a0 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f   NULL, and the O
257b0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
257c0 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e  ag is set in P2.
257d0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
257e0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
257f0 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c  ag is set in P2,
25800 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e   then P3 contain
25810 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a  s the address.**
25820 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
25830 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
25840 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
25850 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
25860 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65  e row will.** be
25870 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75   set to by the u
25880 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pdate..*/.case O
25890 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  P_Delete: {.  Vd
258a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
258b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
258c0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
258d0 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a    int opflags;..
258e0 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d    opflags = pOp-
258f0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
25900 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
25910 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
25920 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
25930 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25940 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25950 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
25960 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
25970 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
25980 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
25990 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
259a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
259b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64  veto==0 );..#ifd
259c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
259d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
259e0 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
259f0 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e  asRowid(pOp->p4.
25a00 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35  pTab) && pOp->p5
25a10 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ==0 ){.    /* If
25a20 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   p5 is zero, the
25a30 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
25a40 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20  that positioned 
25a50 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
25a60 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65   to.    ** OP_De
25a70 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61  lete will have a
25a80 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
25a90 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
25aa0 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
25ab0 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f  of.    ** the ro
25ac0 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20  w that is being 
25ad0 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69  deleted */.    i
25ae0 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65  64 iKey = sqlite
25af0 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
25b00 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
25b10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
25b20 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d  ->movetoTarget==
25b30 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  iKey );.  }.#end
25b40 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  if..  /* If the 
25b50 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70  update-hook or p
25b60 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77  re-update-hook w
25b70 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
25b80 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20  set zDb to.  ** 
25b90 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
25ba0 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f  db to pass as to
25bb0 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f   it. Also set lo
25bc0 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f  cal pTab to a co
25bd0 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54  py.  ** of p4.pT
25be0 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  ab. Finally, if 
25bf0 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69  p5 is true, indi
25c00 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73  cating that this
25c10 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a   cursor was.  **
25c20 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68   last moved with
25c30 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50   OP_Next or OP_P
25c40 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72  rev, not Seek or
25c50 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a   NotFound, set .
25c60 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e    ** VdbeCursor.
25c70 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20  movetoTarget to 
25c80 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69  the current rowi
25c90 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  d.  */.  if( pOp
25ca0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
25cb0 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
25cc0 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
25cd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
25ce0 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
25cf0 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21  t( pOp->p4.pTab!
25d00 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20  =0 );.    zDb = 
25d10 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
25d20 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70  .zDbSName;.    p
25d30 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
25d40 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70  ab;.    if( (pOp
25d50 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41  ->p5 & OPFLAG_SA
25d60 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26  VEPOSITION)!=0 &
25d70 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
25d80 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  .      pC->movet
25d90 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
25da0 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
25db0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
25dc0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
25dd0 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20  .    zDb = 0;   
25de0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
25df0 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
25e00 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
25e10 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a     pTab = 0;  /*
25e20 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
25e30 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
25e40 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
25e50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
25e60 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
25e70 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
25e80 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
25e90 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
25ea0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  d. */.  if( db->
25eb0 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
25ec0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54  ck && pOp->p4.pT
25ed0 61 62 20 26 26 20 48 61 73 52 6f 77 69 64 28 70  ab && HasRowid(p
25ee0 54 61 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  Tab) ){.    asse
25ef0 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20  rt( !(opflags & 
25f00 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
25f10 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70   || (aMem[pOp->p
25f20 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3].flags & MEM_I
25f30 6e 74 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  nt) );.    sqlit
25f40 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
25f50 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20  ook(p, pC,.     
25f60 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50     (opflags & OP
25f70 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
25f80 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
25f90 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
25fa0 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54  .        zDb, pT
25fb0 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ab, pC->movetoTa
25fc0 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f  rget,.        pO
25fd0 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d  p->p3.    );.  }
25fe0 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
25ff0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29   OPFLAG_ISNOOP )
26000 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20   break;.#endif. 
26010 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73  .  /* Only flags
26020 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65 74   that can be set
26030 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49 4f   are SAVEPOISTIO
26040 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  N and AUXDELETE 
26050 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28 70  */ .  assert( (p
26060 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41  Op->p5 & ~(OPFLA
26070 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f  G_SAVEPOSITION|O
26080 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29  PFLAG_AUXDELETE)
26090 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
260a0 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  ( OPFLAG_SAVEPOS
260b0 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56  ITION==BTREE_SAV
260c0 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61  EPOSITION );.  a
260d0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41 55  ssert( OPFLAG_AU
260e0 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41  XDELETE==BTREE_A
260f0 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66  UXDELETE );..#if
26100 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26110 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
26120 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
26130 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d  C->isEphemeral==
26140 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 4f  0.        && (pO
26150 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
26160 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20  UXDELETE)==0.   
26170 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72 46       && (pC->wrF
26180 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  lag & OPFLAG_FOR
26190 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20  DELETE)==0.     
261a0 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
261b0 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Delete++;.    }.
261c0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
261d0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
261e0 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
261f0 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a  Delete--;.    }.
26200 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63    }.#endif..  rc
26210 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
26220 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75  elete(pC->uc.pCu
26230 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a  rsor, pOp->p5);.
26240 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
26250 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26260 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26270 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26280 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ror;..  /* Invok
26290 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
262a0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
262b0 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  /.  if( opflags 
262c0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
262d0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
262e0 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62  ge++;.    if( db
262f0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
26300 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54  k && HasRowid(pT
26310 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ab) ){.      db-
26320 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
26330 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
26340 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
26350 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
26360 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  ,.          pC->
26370 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
26380 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
26390 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d  >iDb>=0 );.    }
263a0 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
263b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
263c0 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
263d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
263e0 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
263f0 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
26400 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
26410 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
26420 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
26430 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
26440 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
26450 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
26460 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
26470 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
26480 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
26490 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
264a0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
264b0 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
264c0 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
264d0 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
264e0 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
264f0 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
26500 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
26510 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26520 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
26530 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
26540 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65   Synopsis: if ke
26550 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33  y(P1)!=trim(r[P3
26560 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ],P4) goto P2.**
26570 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
26580 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20  er cursor. This 
26590 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70  instruction comp
265a0 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66  ares a prefix of
265b0 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62   the.** record b
265c0 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
265d0 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65  P3 against a pre
265e0 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79  fix of the entry
265f0 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f   that .** the so
26600 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72  rter cursor curr
26610 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e  ently points to.
26620 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74    Only the first
26630 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66   P4 fields.** of
26640 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73   r[P3] and the s
26650 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
26660 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a   compared..**.**
26670 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72   If either P3 or
26680 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74   the sorter cont
26690 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f  ains a NULL in o
266a0 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e  ne of their sign
266b0 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64  ificant.** field
266c0 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20  s (not counting 
266d0 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74  the P4 fields at
266e0 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61   the end which a
266f0 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e  re ignored) then
26700 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
26710 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  on is assumed to
26720 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a   be equal..**.**
26730 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
26740 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
26750 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63  n if the two rec
26760 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ords compare equ
26770 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74  al to.** each ot
26780 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  her.  Jump to P2
26790 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66   if they are dif
267a0 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20  ferent..*/.case 
267b0 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  OP_SorterCompare
267c0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
267d0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
267e0 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a  .  int nKeyCol;.
267f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26800 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26810 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
26820 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
26830 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
26840 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d  NT32 );.  pIn3 =
26850 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
26860 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70  .  nKeyCol = pOp
26870 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20  ->p4.i;.  res = 
26880 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
26890 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
268a0 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
268b0 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
268c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
268d0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
268e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
268f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26900 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
26910 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
26920 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
26930 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
26940 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
26950 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
26960 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
26970 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
26980 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
26990 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
269a0 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  er cursor P1..**
269b0 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20   Then clear the 
269c0 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61  column header ca
269d0 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33  che on cursor P3
269e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
269f0 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  ode is normally 
26a00 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65  use to move a re
26a10 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20  cord out of the 
26a20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a  sorter and into.
26a30 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68  ** a register th
26a40 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  at is the source
26a50 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61   for a pseudo-ta
26a60 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74  ble cursor creat
26a70 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e  ed using.** Open
26a80 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73  Pseudo.  That ps
26a90 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
26aa0 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61  r is the one tha
26ab0 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
26ac0 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  by.** parameter 
26ad0 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68  P3.  Clearing th
26ae0 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68  e P3 column cach
26af0 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  e as part of thi
26b00 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a  s opcode saves.*
26b10 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67  * us from having
26b20 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61   to issue a sepa
26b30 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73  rate NullRow ins
26b40 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61  truction to clea
26b50 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f  r that cache..*/
26b60 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
26b70 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
26b80 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
26b90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
26ba0 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
26bb0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26bc0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
26bd0 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
26be0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
26bf0 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
26c00 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
26c10 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75  QLITE_OK || (pOu
26c20 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  t->flags & MEM_B
26c30 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  lob) );.  assert
26c40 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
26c50 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
26c60 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29  or );.  if( rc )
26c70 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26c80 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61  to_error;.  p->a
26c90 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
26ca0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
26cb0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
26cc0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26cd0 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a   RowData P1 P2 *
26ce0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
26cf0 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
26d00 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
26d10 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
26d20 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20  mplete row data 
26d30 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
26d40 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
26d50 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
26d60 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
26d70 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
26d80 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
26d90 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
26da0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
26db0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
26dc0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
26dd0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
26de0 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
26df0 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
26e00 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
26e10 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
26e20 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
26e30 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  table..*/./* Opc
26e40 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50  ode: RowKey P1 P
26e50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
26e60 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a  sis: r[P2]=key.*
26e70 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
26e80 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
26e90 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79  complete row key
26ea0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
26eb0 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
26ec0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
26ed0 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
26ee0 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65  The key is copie
26ef0 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
26f00 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
26f10 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
26f20 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
26f30 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
26f40 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
26f50 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
26f60 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
26f70 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
26f80 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
26f90 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
26fa0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
26fb0 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
26fc0 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
26fd0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26fe0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
26ff0 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70  r;.  u32 n;..  p
27000 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
27010 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
27020 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
27030 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68  );..  /* Note th
27040 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f  at RowKey and Ro
27050 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79  wData are really
27060 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
27070 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  e instruction */
27080 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27090 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
270a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
270b0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
270c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
270d0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
270e0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
270f0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
27100 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  E );.  assert( i
27110 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29  sSorter(pC)==0 )
27120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27130 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
27140 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61  opcode!=OP_RowDa
27150 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
27160 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c  pC->isTable==0 |
27170 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
27180 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
27190 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
271a0 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
271b0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
271c0 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  r!=0 );.  pCrsr 
271d0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
271e0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
271f0 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77  owKey and OP_Row
27200 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77  Data opcodes alw
27210 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f  ays follow OP_No
27220 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20  tExists or.  ** 
27230 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20  OP_SeekRowid or 
27240 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78  OP_Rewind/Op_Nex
27250 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76  t with no interv
27260 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  ening instructio
27270 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67  ns.  ** that mig
27280 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  ht invalidate th
27290 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49  e cursor..  ** I
272a0 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74  f this where not
272b0 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66   the case, on of
272c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
272d0 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f  ssert()s.  ** wo
272e0 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c  uld fail.  Shoul
272f0 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e  d this ever chan
27300 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63  ge (because of c
27310 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f  hanges in the co
27320 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f  de.  ** generato
27330 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20  r) then the fix 
27340 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65  would be to inse
27350 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  rt a call to.  *
27360 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  * sqlite3VdbeCur
27370 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a  sorMoveto()..  *
27380 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
27390 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
273a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
273b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
273c0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
273d0 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74  );.#if 0  /* Not
273e0 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f   required due to
273f0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f   the previous to
27400 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
27410 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ents */.  rc = s
27420 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
27430 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
27440 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
27450 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27460 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
27470 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  f..  n = sqlite3
27480 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65  BtreePayloadSize
27490 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e  (pCrsr);.  if( n
274a0 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
274b0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
274c0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
274d0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
274e0 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20   testcase( n==0 
274f0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
27500 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
27510 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d 41 58 28  esize(pOut, MAX(
27520 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20 20 67 6f  n,32)) ){.    go
27530 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
27540 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20   pOut->n = n;.  
27550 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
27560 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  Out, MEM_Blob);.
27570 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
27580 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  e==0 ){.    rc =
27590 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
275a0 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
275b0 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  ut->z);.  }else{
275c0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
275d0 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
275e0 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
275f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
27600 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27610 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
27620 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
27630 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
27640 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
27650 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
27660 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
27670 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
27680 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
27690 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
276a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
276b0 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
276c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
276d0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
276e0 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
276f0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
27700 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
27710 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
27720 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
27730 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
27740 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
27750 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
27760 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
27770 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
27780 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
27790 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
277a0 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
277b0 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
277c0 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
277d0 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
277e0 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
277f0 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
27800 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
27810 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
27820 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
27830 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
27840 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
27850 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69  .  i64 v;.  sqli
27860 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
27870 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
27880 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
27890 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
278a0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
278b0 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
278c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
278d0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
278e0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
278f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27900 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27910 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
27920 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
27930 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
27940 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43  lRow );.  if( pC
27950 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
27960 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
27970 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65  EM_Null;.    bre
27980 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ak;.  }else if( 
27990 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
279a0 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  to ){.    v = pC
279b0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a  ->movetoTarget;.
279c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
279d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
279e0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
279f0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
27a00 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61  PE_VTAB ){.    a
27a10 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56  ssert( pC->uc.pV
27a20 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56  Cur!=0 );.    pV
27a30 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43  tab = pC->uc.pVC
27a40 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  ur->pVtab;.    p
27a50 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
27a60 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
27a70 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
27a80 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
27a90 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
27aa0 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26  (pC->uc.pVCur, &
27ab0 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
27ac0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
27ad0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
27ae0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
27af0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
27b00 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
27b10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
27b20 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
27b30 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
27b40 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
27b50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61  E_BTREE );.    a
27b60 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
27b70 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
27b80 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27b90 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
27ba0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
27bb0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27bc0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
27bd0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
27be0 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
27bf0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
27c00 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
27c10 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
27c20 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
27c30 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
27c40 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
27c50 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
27c60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
27c70 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
27c80 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
27c90 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
27ca0 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
27cb0 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
27cc0 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
27cd0 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
27ce0 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
27cf0 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
27d00 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
27d10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
27d20 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
27d30 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
27d40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27d50 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
27d60 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
27d70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
27d80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27d90 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
27da0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61  ow = 1;.  pC->ca
27db0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27dc0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
27dd0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
27de0 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20  TYPE_BTREE ){.  
27df0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
27e00 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
27e10 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
27e20 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75  learCursor(pC->u
27e30 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  c.pCursor);.  }.
27e40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
27e50 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
27e60 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
27e70 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
27e80 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
27e90 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
27ea0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
27eb0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
27ec0 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
27ed0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
27ee0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
27ef0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
27f00 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
27f10 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
27f20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
27f30 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
27f40 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
27f50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
27f60 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
27f70 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
27f80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
27f90 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
27fa0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
27fb0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
27fc0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
27fd0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
27fe0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
27ff0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
28000 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
28010 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
28020 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
28030 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
28040 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
28050 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
28060 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
28070 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
28080 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
28090 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
280a0 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
280b0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
280c0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
280d0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
280e0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
280f0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
28100 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
28110 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
28120 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
28130 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
28140 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
28150 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
28160 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
28170 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
28180 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e  , &res);.  pC->n
28190 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
281a0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
281b0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
281c0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
281d0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
281e0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
281f0 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20  pOp->p3;.#ifdef 
28200 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
28210 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
28220 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
28230 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28240 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28250 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
28260 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
28270 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
28280 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20  ;.    if( res ) 
28290 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
282a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
282b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
282c0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
282d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
282e0 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
282f0 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
28300 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
28310 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
28320 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
28330 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
28340 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
28350 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
28360 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
28370 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
28380 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
28390 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
283a0 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
283b0 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
283c0 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
283d0 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
283e0 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
283f0 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
28400 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
28410 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
28420 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
28430 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
28440 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
28450 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
28460 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
28470 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
28480 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
28490 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
284a0 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
284b0 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
284c0 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
284d0 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a  e OP_SorterSort:
284e0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
284f0 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
28500 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
28510 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
28520 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
28530 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
28540 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
28550 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
28560 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
28570 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
28580 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  T]++;.  /* Fall 
28590 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
285a0 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
285b0 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
285c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
285d0 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
285e0 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
285f0 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
28600 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
28610 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
28620 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
28630 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28640 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
28650 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
28660 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
28670 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ty, jump immedia
28680 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
28690 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
286a0 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
286b0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  y, fall through 
286c0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
286d0 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
286e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
286f0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
28700 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
28710 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
28720 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
28730 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
28740 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
28750 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
28760 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
28770 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
28780 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
28790 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rev..*/.case OP_
287a0 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
287b0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
287c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
287d0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
287e0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
287f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
28800 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
28810 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
28820 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
28830 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
28840 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
28850 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
28860 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
28870 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a  _SorterSort) );.
28880 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65    res = 1;.#ifde
28890 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
288a0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
288b0 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a  _Rewind;.#endif.
288c0 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
288d0 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
288e0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
288f0 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29  Rewind(pC, &res)
28900 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
28910 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
28920 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
28930 45 45 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20  EE );.    pCrsr 
28940 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
28950 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
28960 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  rsr );.    rc = 
28970 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
28980 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
28990 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
289a0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
289b0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
289c0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
289d0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
289e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
289f0 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c  error;.  pC->nul
28a00 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
28a10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28a20 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
28a30 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42  ->nOp );.  VdbeB
28a40 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
28a50 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
28a60 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
28a70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
28a80 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
28a90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28aa0 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
28ab0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
28ac0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
28ad0 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
28ae0 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
28af0 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
28b00 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
28b10 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
28b20 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
28b30 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
28b40 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
28b50 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
28b60 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
28b70 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
28b80 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
28b90 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
28ba0 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
28bb0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66   is only valid f
28bc0 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b  ollowing an Seek
28bd0 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a  GT, SeekGE, or.*
28be0 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f  * OP_Rewind opco
28bf0 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
28c00 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
28c10 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c   Next is not all
28c20 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
28c30 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  w SeekLT, SeekLE
28c40 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a  , or OP_Last..**
28c50 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
28c60 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
28c70 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
28c80 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
28c90 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a   P1 must have.**
28ca0 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69   been opened pri
28cb0 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64  or to this opcod
28cc0 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d  e or the program
28cd0 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a   will segfault..
28ce0 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
28cf0 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
28d00 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
28d10 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
28d20 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
28d30 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
28d40 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
28d50 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
28d60 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
28d70 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
28d80 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
28d90 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
28da0 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
28db0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
28dc0 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
28dd0 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
28de0 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
28df0 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
28e00 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
28e10 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
28e20 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  Next()..**.** If
28e30 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
28e40 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
28e50 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
28e60 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
28e70 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
28e80 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
28e90 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
28ea0 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
28eb0 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f  o: Prev, NextIfO
28ec0 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  pen.*/./* Opcode
28ed0 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20  : NextIfOpen P1 
28ee0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
28ef0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
28f00 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65  rks just like Ne
28f10 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20 69  xt except that i
28f20 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
28f30 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
28f40 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
28f50 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
28f60 76 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  v P1 P2 P3 P4 P5
28f70 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
28f80 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
28f90 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
28fa0 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
28fb0 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
28fc0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
28fd0 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
28fe0 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
28ff0 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
29000 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
29010 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
29020 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
29030 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
29040 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
29050 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
29060 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
29070 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P2..**.**.** The
29080 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20   Prev opcode is 
29090 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f  only valid follo
290a0 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20  wing an SeekLT, 
290b0 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50  SeekLE, or.** OP
290c0 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65  _Last opcode use
290d0 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68  d to position th
290e0 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20  e cursor.  Prev 
290f0 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a  is not allowed.*
29100 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b  * to follow Seek
29110 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f  GT, SeekGE, or O
29120 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20  P_Rewind..**.** 
29130 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
29140 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
29150 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
29160 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20  eudo-table.  If 
29170 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65  P1 is.** not ope
29180 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  n then the behav
29190 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
291a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
291b0 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
291c0 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
291d0 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
291e0 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
291f0 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
29200 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
29210 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
29220 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
29230 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
29240 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
29250 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
29260 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
29270 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
29280 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
29290 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
292a0 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
292b0 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
292c0 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
292d0 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
292e0 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a  eePrevious()..**
292f0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
29300 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
29310 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
29320 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
29330 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
29340 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
29350 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
29360 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f  emented..*/./* O
29370 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65  pcode: PrevIfOpe
29380 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
29390 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
293a0 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
293b0 6b 65 20 50 72 65 76 20 65 78 63 65 70 74 20 74  ke Prev except t
293c0 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31  hat if cursor P1
293d0 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20   is not.** open 
293e0 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d  it behaves a no-
293f0 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  op..*/.case OP_S
29400 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a  orterNext: {  /*
29410 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
29420 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
29430 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d   res;..  pC = p-
29440 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
29450 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
29460 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73  ter(pC) );.  res
29470 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
29480 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65  ite3VdbeSorterNe
29490 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  xt(db, pC, &res)
294a0 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61  ;.  goto next_ta
294b0 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  il;.case OP_Prev
294c0 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
294d0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
294e0 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  xtIfOpen:    /* 
294f0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d  jump */.  if( p-
29500 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d  >apCsr[pOp->p1]=
29510 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
29520 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f   Fall through */
29530 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
29540 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
29550 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
29560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
29570 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
29580 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29590 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
295a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
295b0 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70  ->p5<ArraySize(p
295c0 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
295d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
295e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d  Op->p1];.  res =
295f0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
29600 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
29610 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
29620 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
29630 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29640 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
29650 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
29660 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65  t( res==0 || (re
29670 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61  s==1 && pC->isTa
29680 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73  ble==0) );.  tes
29690 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b  tcase( res==1 );
296a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
296b0 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
296c0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
296d0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
296e0 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
296f0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29700 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
29710 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
29720 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
29730 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  s );.  assert( p
29740 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
29750 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  extIfOpen || pOp
29760 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
29770 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
29780 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
29790 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
297a0 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  vIfOpen || pOp->
297b0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
297c0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
297d0 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65  s);..  /* The Ne
297e0 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
297f0 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
29800 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64  kGT, SeekGE, and
29810 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68   Rewind..  ** Th
29820 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73  e Prev opcode is
29830 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
29840 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
29850 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20   and Last. */.  
29860 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29870 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20  ode!=OP_Next || 
29880 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
29890 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20  NextIfOpen.     
298a0 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
298b0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43  =OP_SeekGT || pC
298c0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
298d0 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kGE.       || pC
298e0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77  ->seekOp==OP_Rew
298f0 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  ind || pC->seekO
29900 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20  p==OP_Found);.  
29910 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29920 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
29930 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
29940 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20  PrevIfOpen.     
29950 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
29960 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43  =OP_SeekLT || pC
29970 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
29980 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kLE.       || pC
29990 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73  ->seekOp==OP_Las
299a0 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70  t );..  rc = pOp
299b0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43  ->p4.xAdvance(pC
299c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
299d0 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a  es);.next_tail:.
299e0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
299f0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
29a00 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
29a10 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20  en(res==0,2);.  
29a20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
29a30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
29a40 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
29a50 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
29a60 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43  w = 0;.    p->aC
29a70 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
29a80 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
29a90 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
29aa0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
29ab0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74  ;.#endif.    got
29ac0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
29ad0 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
29ae0 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
29af0 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
29b00 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
29b10 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
29b20 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
29b30 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
29b40 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
29b50 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
29b60 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
29b70 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
29b80 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
29b90 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
29ba0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
29bb0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
29bc0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
29bd0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
29be0 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
29bf0 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
29c00 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
29c10 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
29c20 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
29c30 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
29c40 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
29c50 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
29c60 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
29c70 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
29c80 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
29c90 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
29ca0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
29cb0 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
29cc0 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
29cd0 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
29ce0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
29cf0 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
29d00 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
29d10 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
29d20 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
29d30 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
29d40 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
29d50 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
29d60 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  he cursor must h
29d70 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65  ave.** just done
29d80 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73   a seek to the s
29d90 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65  pot where the ne
29da0 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65  w entry is to be
29db0 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68   inserted..** Th
29dc0 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64  is flag avoids d
29dd0 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65  oing an extra se
29de0 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ek..**.** This i
29df0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
29e00 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
29e10 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
29e20 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
29e30 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
29e40 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
29e50 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
29e60 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
29e70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
29e80 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
29e90 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
29ea0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
29eb0 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20  reePayload x;.. 
29ec0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
29ed0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
29ee0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
29ef0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
29f00 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
29f10 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
29f20 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
29f30 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
29f40 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
29f50 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
29f60 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
29f70 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
29f80 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
29f90 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
29fa0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
29fb0 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
29fc0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29fd0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
29fe0 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  BTREE || pOp->op
29ff0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2a000 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72  nsert );.  asser
2a010 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2a020 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
2a030 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
2a040 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2a050 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2a060 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2a070 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2a080 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d  sert ){.    rc =
2a090 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2a0a0 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
2a0b0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2a0c0 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e  x.nKey = pIn2->n
2a0d0 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70  ;.    x.pKey = p
2a0e0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44  In2->z;.    x.nD
2a0f0 61 74 61 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e  ata = 0;.    x.n
2a100 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 78 2e  Zero = 0;.    x.
2a110 70 44 61 74 61 20 3d 20 30 3b 0a 20 20 20 20 72  pData = 0;.    r
2a120 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2a130 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43  Insert(pC->uc.pC
2a140 75 72 73 6f 72 2c 20 26 78 2c 20 70 4f 70 2d 3e  ursor, &x, pOp->
2a150 70 33 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70  p3, .        ((p
2a160 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
2a170 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
2a180 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2a190 3a 20 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a  : 0).        );.
2a1a0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2a1b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2a1c0 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  0 );.    pC->cac
2a1d0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2a1e0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
2a1f0 28 20 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74  ( rc) goto abort
2a200 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2a210 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2a220 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
2a230 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2a240 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2a250 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P2@P3].**.** The
2a260 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
2a270 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
2a280 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
2a290 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
2a2a0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
2a2b0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
2a2c0 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
2a2d0 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
2a2e0 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
2a2f0 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
2a300 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
2a310 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2a320 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2a330 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
2a340 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
2a350 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
2a360 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
2a370 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
2a380 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
2a390 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
2a3a0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
2a3b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a3c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a3d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2a3e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2a3f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2a400 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2a410 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2a420 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2a430 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
2a440 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2a450 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
2a460 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2a470 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72  Op->p5==0 );.  r
2a480 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
2a490 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46  pKeyInfo;.  r.nF
2a4a0 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
2a4b0 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74  >p3;.  r.default
2a4c0 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65  _rc = 0;.  r.aMe
2a4d0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2a4e0 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  2];.  rc = sqlit
2a4f0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
2a500 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
2a510 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
2a520 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2a530 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2a540 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
2a550 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
2a560 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
2a570 72 73 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45  rsr, BTREE_AUXDE
2a580 4c 45 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72  LETE);.    if( r
2a590 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2a5a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2a5b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
2a5c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2a5d0 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   );.  pC->cacheS
2a5e0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2a5f0 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
2a600 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
2a610 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a   P1 * P3 P4 *.**
2a620 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76 65 20   Synopsis: Move 
2a630 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64 0a 2a  P3 to P1.rowid.*
2a640 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
2a650 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  en index cursor 
2a660 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73  and P3 is a curs
2a670 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  or on the corres
2a680 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65  ponding.** table
2a690 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  .  This opcode d
2a6a0 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73  oes a deferred s
2a6b0 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61  eek of the P3 ta
2a6c0 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f  ble cursor.** to
2a6d0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f   the row that co
2a6e0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2a6f0 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
2a700 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P1..**.** This i
2a710 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2a720 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
2a730 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
2a740 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
2a750 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
2a760 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
2a770 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
2a780 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
2a790 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
2a7a0 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34  appens..**.** P4
2a7b0 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79   may be an array
2a7c0 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79   of integers (ty
2a7d0 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20  pe P4_INTARRAY) 
2a7e0 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e  containing.** on
2a7f0 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
2a800 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50   column in the P
2a810 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72  3 table.  If arr
2a820 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a  ay entry a(i).**
2a830 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2a840 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2a850 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75  n a(i)-1 from cu
2a860 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65  rsor P3 is .** e
2a870 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72  quivalent to per
2a880 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65  forming the defe
2a890 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68  rred seek and th
2a8a0 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2a8b0 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e  n i .** from P1.
2a8c0 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
2a8d0 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
2a8e0 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  P3 and used to r
2a8f0 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73  edirect.** reads
2a900 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72   against P3 over
2a910 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73   to P1, thus pos
2a920 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74  sibly avoiding t
2a930 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65  he need to.** se
2a940 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73  ek and read curs
2a950 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  or P3..*/./* Opc
2a960 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
2a970 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a980 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
2a990 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  id.**.** Write i
2a9a0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
2a9b0 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
2a9c0 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
2a9d0 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
2a9e0 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
2a9f0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
2aa00 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
2aa10 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
2aa20 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
2aa30 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
2aa40 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2aa50 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
2aa60 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
2aa70 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
2aa80 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
2aa90 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
2aaa0 5f 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49  _Seek:.case OP_I
2aab0 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
2aac0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2aad0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2aae0 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  *pC;            
2aaf0 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e      /* The P1 in
2ab00 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  dex cursor */.  
2ab10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62  VdbeCursor *pTab
2ab20 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Cur;           /
2ab30 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63  * The P2 table c
2ab40 75 72 73 6f 72 20 28 4f 50 5f 53 65 65 6b 20 6f  ursor (OP_Seek o
2ab50 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f  nly) */.  i64 ro
2ab60 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
2ab70 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69           /* Rowi
2ab80 64 20 74 68 61 74 20 50 31 20 63 75 72 72 65 6e  d that P1 curren
2ab90 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a  t points to */..
2aba0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2abb0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2abc0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2abd0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2abe0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2abf0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2ac00 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2ac10 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2ac20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2ac30 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2ac40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2ac50 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
2ac60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2ac70 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2ac80 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 43 2d  ;.  assert( !pC-
2ac90 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d  >nullRow || pOp-
2aca0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
2acb0 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  owid );..  /* Th
2acc0 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53  e IdxRowid and S
2acd0 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20  eek opcodes are 
2ace0 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65  combined because
2acf0 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c   of the commonal
2ad00 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69  ity.  ** of sqli
2ad10 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2ad20 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74  tore() and sqlit
2ad30 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 29  e3VdbeIdxRowid()
2ad40 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
2ad50 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2ad60 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20  tore(pC);..  /* 
2ad70 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72  sqlite3VbeCursor
2ad80 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e  Restore() can on
2ad90 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72  ly fail if the r
2ada0 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64  ecord has been d
2adb0 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20  eleted.  ** out 
2adc0 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63  from under the c
2add0 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c  ursor.  That wil
2ade0 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20  l never happens 
2adf0 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a  for an IdxRowid.
2ae00 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63    ** or Seek opc
2ae10 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56  ode */.  if( NEV
2ae20 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
2ae30 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2ae40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
2ae50 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
2ae60 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20   ){.    rowid = 
2ae70 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2ae80 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
2ae90 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2aea0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2aeb0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
2aec0 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70  wid(db, pC->uc.p
2aed0 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b  Cursor, &rowid);
2aee0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
2aef0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2af00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2af10 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
2af20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
2af30 64 65 3d 3d 4f 50 5f 53 65 65 6b 20 29 7b 0a 20  de==OP_Seek ){. 
2af40 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2af50 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
2af60 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p3<p->nCursor );
2af70 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d  .      pTabCur =
2af80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2af90 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  3];.      assert
2afa0 28 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a  ( pTabCur!=0 );.
2afb0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2afc0 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d  abCur->eCurType=
2afd0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2afe0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2aff0 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72  pTabCur->uc.pCur
2b000 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  sor!=0 );.      
2b010 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2b020 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
2b030 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52    pTabCur->nullR
2b040 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54  ow = 0;.      pT
2b050 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72  abCur->movetoTar
2b060 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  get = rowid;.   
2b070 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65     pTabCur->defe
2b080 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
2b090 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
2b0a0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2b0b0 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70  TARRAY || pOp->p
2b0c0 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20  4.ai==0 );.     
2b0d0 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61   pTabCur->aAltMa
2b0e0 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  p = pOp->p4.ai;.
2b0f0 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70        pTabCur->p
2b100 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a  AltCursor = pC;.
2b110 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2b120 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2b130 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2b140 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
2b150 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2b160 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2b170 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  _Int;.    }.  }e
2b180 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2b190 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2b1a0 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  _IdxRowid );.   
2b1b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b1c0 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70  etNull(&aMem[pOp
2b1d0 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72  ->p2]);.  }.  br
2b1e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b1f0 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
2b200 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2b210 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2b220 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2b230 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2b240 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2b250 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2b260 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2b270 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2b280 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
2b290 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2b2a0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
2b2b0 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
2b2c0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
2b2d0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
2b2e0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
2b2f0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
2b300 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
2b310 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
2b320 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2b330 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2b340 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2b350 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2b360 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2b370 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2b380 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2b390 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2b3a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2b3b0 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
2b3c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2b3d0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2b3e0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2b3f0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2b400 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2b410 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2b420 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2b430 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2b440 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2b450 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2b460 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2b470 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2b480 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2b490 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2b4a0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2b4b0 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2b4c0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2b4d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2b4e0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2b4f0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
2b500 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2b510 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2b520 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2b530 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2b540 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2b550 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2b560 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
2b570 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2b580 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2b590 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2b5a0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2b5b0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2b5c0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2b5d0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2b5e0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2b5f0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2b600 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2b610 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2b620 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2b630 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2b640 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2b650 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2b660 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2b670 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2b680 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2b690 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2b6a0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
2b6b0 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2b6c0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
2b6d0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2b6e0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2b6f0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2b700 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2b710 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
2b720 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2b730 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2b740 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2b750 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2b760 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2b770 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2b780 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2b790 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2b7a0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2b7b0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2b7c0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2b7d0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2b7e0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2b7f0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2b800 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2b810 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2b820 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2b830 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2b840 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2b850 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
2b860 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2b870 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2b880 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
2b890 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2b8a0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2b8b0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2b8c0 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
2b8d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b8e0 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
2b8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2b900 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
2b910 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2b920 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2b930 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
2b940 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2b950 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
2b960 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2b970 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2b980 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b990 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2b9a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2b9b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b9c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b9d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b9e0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
2b9f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2ba00 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2ba10 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2ba20 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2ba30 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
2ba40 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2ba50 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2ba60 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
2ba70 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
2ba80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2ba90 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
2baa0 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
2bab0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2bac0 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2bad0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2bae0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2baf0 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
2bb00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2bb10 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2bb20 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2bb30 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
2bb40 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
2bb50 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2bb60 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2bb70 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
2bb80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2bb90 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
2bba0 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2bbb0 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
2bbc0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
2bbd0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2bbe0 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
2bbf0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
2bc00 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
2bc10 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
2bc20 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
2bc30 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
2bc40 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2bc50 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2bc60 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2bc70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2bc80 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
2bc90 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
2bca0 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
2bcb0 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
2bcc0 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
2bcd0 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
2bce0 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
2bcf0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
2bd00 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
2bd10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2bd20 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2bd30 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2bd40 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
2bd50 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
2bd60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2bd70 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2bd80 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2bd90 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2bda0 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
2bdb0 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
2bdc0 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
2bdd0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2bde0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2bdf0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30  ror;.  if( res>0
2be00 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2be10 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2be20 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
2be30 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
2be40 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
2be50 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2be60 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2be70 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
2be80 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
2be90 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
2bea0 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
2beb0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
2bec0 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
2bed0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2bee0 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
2bef0 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
2bf00 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2bf10 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2bf20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2bf30 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2bf40 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2bf50 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2bf60 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2bf70 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2bf80 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
2bf90 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
2bfa0 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2bfb0 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
2bfc0 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
2bfd0 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
2bfe0 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
2bff0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
2c000 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
2c010 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
2c020 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
2c030 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
2c040 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
2c050 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
2c060 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
2c070 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
2c080 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
2c090 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
2c0a0 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
2c0b0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
2c0c0 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
2c0d0 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
2c0e0 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
2c0f0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
2c100 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
2c110 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
2c120 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2c130 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
2c140 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2c150 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
2c160 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
2c170 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
2c180 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
2c190 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2c1a0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
2c1b0 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
2c1c0 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
2c1d0 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
2c1e0 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b  oved;.  int iDb;
2c1f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
2c200 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2c210 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2c220 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  1 );.  pOut = ou
2c230 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2c240 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
2c250 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2c260 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52    if( db->nVdbeR
2c270 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74  ead > db->nVDest
2c280 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20  roy+1 ){.    rc 
2c290 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
2c2a0 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
2c2b0 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
2c2c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2c2d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2c2e0 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
2c2f0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
2c300 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2c310 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
2c320 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64  b) );.    iMoved
2c330 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2c340 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73  eded.  Only to s
2c350 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
2c360 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
2c370 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
2c380 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
2c390 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
2c3a0 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
2c3b0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
2c3c0 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
2c3d0 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20  i = iMoved;.    
2c3e0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2c3f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2c400 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2c410 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
2c420 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21  .    if( iMoved!
2c430 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2c440 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2c450 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
2c460 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
2c470 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
2c480 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
2c490 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
2c4a0 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
2c4b0 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
2c4c0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
2c4d0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2c4e0 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
2c4f0 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
2c500 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
2c510 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
2c520 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2c530 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
2c540 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
2c550 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
2c560 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2c570 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2c580 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
2c590 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
2c5a0 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
2c5b0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
2c5c0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
2c5d0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
2c5e0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2c5f0 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
2c600 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2c610 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
2c620 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2c630 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2c640 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
2c650 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
2c660 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2c670 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2c680 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2c690 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2c6a0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2c6b0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2c6c0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2c6d0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2c6e0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
2c6f0 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
2c700 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
2c710 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
2c720 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
2c730 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
2c740 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
2c750 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
2c760 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
2c770 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
2c780 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2c790 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2c7a0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2c7b0 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
2c7c0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
2c7d0 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
2c7e0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
2c7f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
2c800 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
2c810 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
2c820 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2c830 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2c840 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
2c850 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
2c860 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
2c870 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
2c880 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
2c890 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
2c8a0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2c8b0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2c8c0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2c8d0 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
2c8e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2c8f0 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
2c900 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
2c910 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
2c920 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
2c930 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
2c940 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2c950 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
2c960 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2c970 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
2c980 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2c990 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
2c9a0 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
2c9b0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2c9c0 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
2c9d0 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
2c9e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
2c9f0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2ca00 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
2ca10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2ca20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2ca30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ca40 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31  : ResetSorter P1
2ca50 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
2ca60 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2ca70 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65  ts from the ephe
2ca80 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73  meral table or s
2ca90 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73  orter.** that is
2caa0 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20   open on cursor 
2cab0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P1..**.** This o
2cac0 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73  pcode only works
2cad0 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65   for cursors use
2cae0 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e  d for sorting an
2caf0 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68  d.** opened with
2cb00 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
2cb10 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70  l or OP_SorterOp
2cb20 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  en..*/.case OP_R
2cb30 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20  esetSorter: {.  
2cb40 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2cb50 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d   .  assert( pOp-
2cb60 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2cb70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2cb80 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2cb90 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2cba0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
2cbb0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
2cbc0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2cbd0 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
2cbe0 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72  , pC->uc.pSorter
2cbf0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2cc00 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2cc10 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2cc20 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
2cc30 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
2cc40 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
2cc50 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2cc60 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
2cc70 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2cc80 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2cc90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2cca0 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
2ccb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ccc0 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50  CreateTable P1 P
2ccd0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2cce0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2ccf0 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
2cd00 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
2cd10 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
2cd20 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2cd30 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
2cd40 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
2cd50 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2cd60 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
2cd70 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
2cd80 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
2cd90 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
2cda0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
2cdb0 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
2cdc0 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
2cdd0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
2cde0 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
2cdf0 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
2ce00 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
2ce10 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
2ce20 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
2ce30 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
2ce40 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
2ce50 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
2ce60 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
2ce70 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
2ce80 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
2ce90 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
2cea0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
2ceb0 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
2cec0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2ced0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
2cee0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
2cef0 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ew index in the 
2cf00 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2cf10 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
2cf20 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
2cf30 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2cf40 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
2cf50 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2cf60 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
2cf70 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
2cf80 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
2cf90 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
2cfa0 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2cfb0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63  2..**.** See doc
2cfc0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50  umentation on OP
2cfd0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72  _CreateTable for
2cfe0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
2cff0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
2d000 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a   OP_CreateIndex:
2d010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2d020 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ut2 */.case OP_C
2d030 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
2d040 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2d050 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
2d060 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
2d070 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  *pDb;..  pOut = 
2d080 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2d090 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d  , pOp);.  pgno =
2d0a0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2d0b0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2d0c0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2d0d0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2d0e0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2d0f0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
2d100 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2d110 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
2d120 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
2d130 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2d140 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
2d150 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2d160 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
2d170 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
2d180 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
2d190 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
2d1a0 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
2d1b0 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
2d1c0 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
2d1d0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
2d1e0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
2d1f0 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
2d200 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69  gno, flags);.  i
2d210 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2d220 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d230 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
2d240 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
2d250 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
2d260 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50  eSchema P1 * * P
2d270 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
2d280 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
2d290 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
2d2a0 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
2d2b0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
2d2c0 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
2d2d0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2d2e0 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4. .**.** This 
2d2f0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2d300 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
2d310 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
2d320 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
2d330 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
2d340 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
2d350 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
2d360 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
2d370 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
2d380 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
2d390 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
2d3a0 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
2d3b0 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
2d3c0 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
2d3d0 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61  ..  /* Any prepa
2d3e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68  red statement th
2d3f0 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  at invokes this 
2d400 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64  opcode will hold
2d410 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e   mutexes.  ** on
2d420 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54   every btree.  T
2d430 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75  his is a prerequ
2d440 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69  isite for invoki
2d450 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ng .  ** sqlite3
2d460 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a  InitCallback()..
2d470 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
2d480 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
2d490 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44  Db=0; iDb<db->nD
2d4a0 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61  b; iDb++){.    a
2d4b0 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c  ssert( iDb==1 ||
2d4c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c   sqlite3BtreeHol
2d4d0 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b  dsMutex(db->aDb[
2d4e0 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d  iDb].pBt) );.  }
2d4f0 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d  .#endif..  iDb =
2d500 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
2d510 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
2d520 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
2d530 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70  ssert( DbHasProp
2d540 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42  erty(db, iDb, DB
2d550 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
2d560 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62  ;.  /* Used to b
2d570 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  e a conditional 
2d580 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72  */ {.    zMaster
2d590 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28   = SCHEMA_TABLE(
2d5a0 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61  iDb);.    initDa
2d5b0 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  ta.db = db;.    
2d5c0 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70  initData.iDb = p
2d5d0 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74  Op->p1;.    init
2d5e0 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
2d5f0 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  &p->zErrMsg;.   
2d600 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d   zSql = sqlite3M
2d610 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20  Printf(db,.     
2d620 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
2d630 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52  rootpage, sql FR
2d640 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45  OM '%q'.%s WHERE
2d650 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77   %s ORDER BY row
2d660 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e  id",.       db->
2d670 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  aDb[iDb].zDbSNam
2d680 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
2d690 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
2d6a0 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
2d6b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
2d6c0 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  EM_BKPT;.    }el
2d6d0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
2d6e0 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
2d6f0 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
2d700 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
2d710 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
2d720 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2d730 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
2d740 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
2d750 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
2d760 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
2d770 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
2d780 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
2d790 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
2d7a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2d7b0 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
2d7c0 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
2d7d0 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
2d7e0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
2d7f0 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
2d800 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b  .  }.  if( rc ){
2d810 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
2d820 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
2d830 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
2d840 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2d850 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67  NOMEM ){.      g
2d860 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
2d870 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  }.    goto abort
2d880 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2d890 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
2d8a0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2d8b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
2d8c0 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  E)./* Opcode: Lo
2d8d0 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
2d8e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
2d8f0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
2d900 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
2d910 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
2d920 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
2d930 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
2d940 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
2d950 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
2d960 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
2d970 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
2d980 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
2d990 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
2d9a0 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
2d9b0 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
2d9c0 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
2d9d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d9e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2d9f0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20  db->nDb );.  rc 
2da00 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  = sqlite3Analysi
2da10 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70  sLoad(db, pOp->p
2da20 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
2da30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2da40 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2da50 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
2da60 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2da70 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
2da80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2da90 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
2daa0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2dab0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2dac0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2dad0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2dae0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
2daf0 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
2db00 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
2db10 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
2db20 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
2db30 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2db40 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2db50 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
2db60 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
2db70 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
2db80 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2db90 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2dba0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2dbb0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2dbc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
2dbd0 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
2dbe0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2dbf0 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
2dc00 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2dc10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2dc20 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
2dc30 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2dc40 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2dc50 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2dc60 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2dc70 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2dc80 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
2dc90 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2dca0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2dcb0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
2dcc0 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
2dcd0 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2dce0 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2dcf0 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72  opcode).** in or
2dd00 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
2dd10 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2dd20 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2dd30 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2dd40 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2dd50 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2dd60 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
2dd70 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2dd80 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
2dd90 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2dda0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2ddb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ddc0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
2ddd0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2dde0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2ddf0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2de00 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2de10 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2de20 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
2de30 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2de40 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2de50 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
2de60 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
2de70 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2de80 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2de90 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
2dea0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
2deb0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2dec0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2ded0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2dee0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2def0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2df00 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
2df10 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2df20 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2df30 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
2df40 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2df50 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2df60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
2df70 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
2df80 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
2df90 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 50 34  tyCk P1 P2 P3 P4
2dfa0 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
2dfb0 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
2dfc0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
2dfd0 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
2dfe0 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
2dff0 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
2e000 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
2e010 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
2e020 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
2e030 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
2e040 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
2e050 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
2e060 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
2e070 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
2e080 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
2e090 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
2e0a0 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
2e0b0 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
2e0c0 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
2e0d0 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
2e0e0 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
2e0f0 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
2e100 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
2e110 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
2e120 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
2e130 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
2e140 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2e150 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
2e160 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
2e170 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
2e180 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
2e190 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73  ase are integers
2e1a0 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34  .** stored in P4
2e1b0 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65  _INTARRAY argume
2e1c0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nt..**.** If P5 
2e1d0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
2e1e0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
2e1f0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2e200 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
2e210 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
2e220 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2e230 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2e240 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
2e250 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
2e260 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
2e270 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
2e280 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
2e290 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
2e2a0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
2e2b0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
2e2c0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
2e2d0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
2e2e0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
2e2f0 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
2e300 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
2e310 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
2e320 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
2e330 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2e340 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
2e350 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
2e360 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2e370 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
2e380 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
2e390 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
2e3a0 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
2e3b0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2e3c0 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ning */..  asser
2e3d0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
2e3e0 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70  );.  nRoot = pOp
2e3f0 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  ->p2;.  aRoot = 
2e400 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73  pOp->p4.ai;.  as
2e410 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
2e420 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74  .  assert( aRoot
2e430 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29 3b 0a 20 20  [nRoot]==0 );.  
2e440 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2e450 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2e460 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
2e470 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72  ursor) );.  pnEr
2e480 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
2e490 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
2e4a0 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
2e4b0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
2e4c0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2e4d0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2e4e0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
2e4f0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2e500 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e510 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
2e520 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2e530 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2e540 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2e550 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  5) );.  z = sqli
2e560 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
2e570 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
2e580 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f  Op->p5].pBt, aRo
2e590 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20  ot, nRoot,.     
2e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
2e5c0 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45  )pnErr->u.i, &nE
2e5d0 72 72 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e  rr);.  pnErr->u.
2e5e0 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c  i -= nErr;.  sql
2e5f0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2e600 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ll(pIn1);.  if( 
2e610 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61  nErr==0 ){.    a
2e620 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20  ssert( z==0 );. 
2e630 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20   }else if( z==0 
2e640 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
2e650 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  em;.  }else{.   
2e660 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2e670 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d  etStr(pIn1, z, -
2e680 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
2e690 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20  sqlite3_free);. 
2e6a0 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f   }.  UPDATE_MAX_
2e6b0 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
2e6c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2e6d0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31  ngeEncoding(pIn1
2e6e0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62  , encoding);.  b
2e6f0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e700 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
2e710 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
2e720 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2e730 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a  SetAdd P1 P2 * *
2e740 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e750 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d  rowset(P1)=r[P2]
2e760 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68  .**.** Insert th
2e770 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
2e780 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72  held by register
2e790 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65   P2 into a boole
2e7a0 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64  an index.** held
2e7b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
2e7c0 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74  .**.** An assert
2e7d0 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20  ion fails if P2 
2e7e0 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
2e7f0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  r..*/.case OP_Ro
2e800 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20  wSetAdd: {      
2e810 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a   /* in1, in2 */.
2e820 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2e830 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
2e840 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2e850 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
2e860 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
2e870 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  nt)!=0 );.  if( 
2e880 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2e890 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
2e8a0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2e8b0 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
2e8c0 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
2e8d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2e8e0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
2e8f0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73   no_mem;.  }.  s
2e900 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
2e910 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
2e920 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a  et, pIn2->u.i);.
2e930 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e940 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
2e950 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
2e960 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
2e970 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a  ]=rowset(P1).**.
2e980 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
2e990 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
2e9a0 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
2e9b0 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
2e9c0 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
2e9d0 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
2e9e0 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
2e9f0 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
2ea00 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
2ea10 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
2ea20 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
2ea30 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
2ea40 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
2ea50 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
2ea60 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
2ea70 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49    i64 val;..  pI
2ea80 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2ea90 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
2eaa0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2eab0 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
2eac0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
2ead0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2eae0 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
2eaf0 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
2eb00 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
2eb10 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
2eb20 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2eb30 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42  pIn1);.    VdbeB
2eb40 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
2eb50 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
2eb60 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
2eb70 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
2eb80 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
2eb90 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
2eba0 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
2ebb0 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  */.    VdbeBranc
2ebc0 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20  hTaken(0,2);.   
2ebd0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ebe0 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
2ebf0 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
2ec00 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
2ec10 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
2ec20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2ec30 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
2ec40 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
2ec50 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73  if r[P3] in rows
2ec60 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a  et(P1) goto P2.*
2ec70 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
2ec80 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
2ec90 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74  old a 64-bit int
2eca0 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72  eger value. If r
2ecb0 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f  egister P1.** co
2ecc0 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20  ntains a RowSet 
2ecd0 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20  object and that 
2ece0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f  RowSet object co
2ecf0 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61  ntains.** the va
2ed00 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20  lue held in P3, 
2ed10 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72  jump to register
2ed20 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2ed30 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e  insert the.** in
2ed40 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f  teger in P3 into
2ed50 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20   the RowSet and 
2ed60 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74  continue on to t
2ed70 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64  he.** next opcod
2ed80 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77  e..**.** The Row
2ed90 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70  Set object is op
2eda0 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20  timized for the 
2edb0 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65  case where succe
2edc0 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66  ssive sets.** of
2edd0 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65   integers, where
2ede0 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69   each set contai
2edf0 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73  ns no duplicates
2ee00 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66  . Each set.** of
2ee10 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74   values is ident
2ee20 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
2ee30 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
2ee40 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
2ee50 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
2ee60 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d  e final set P4=-
2ee70 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65  1.  P4 must be e
2ee80 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e  ither -1 or.** n
2ee90 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f  on-negative.  Fo
2eea0 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  r non-negative v
2eeb0 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79  alues of P4 only
2eec0 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20   the lower 4.** 
2eed0 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69  bits are signifi
2eee0 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  cant..**.** This
2eef0 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
2ef00 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
2ef10 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
2ef20 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
2ef30 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a  * the rowset obj
2ef40 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
2ef50 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
2ef60 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
2ef70 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
2ef80 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
2ef90 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
2efa0 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
2efb0 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
2efc0 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
2efd0 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
2efe0 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
2eff0 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
2f000 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
2f010 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
2f020 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
2f030 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
2f040 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
2f050 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
2f060 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
2f070 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
2f080 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
2f090 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
2f0a0 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
2f0b0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
2f0c0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
2f0d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2f0e0 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
2f0f0 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
2f100 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
2f110 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2f120 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
2f130 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
2f140 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
2f150 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
2f160 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2f170 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
2f180 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
2f190 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
2f1a0 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
2f1b0 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
2f1c0 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
2f1d0 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
2f1e0 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
2f1f0 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
2f200 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2f210 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
2f220 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2f230 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
2f240 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
2f250 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2f260 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
2f270 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
2f280 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2f290 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2f2a0 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
2f2b0 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
2f2c0 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
2f2d0 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
2f2e0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
2f2f0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69  n1->u.pRowSet, i
2f300 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
2f310 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2f320 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
2f330 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
2f340 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
2f350 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  _p2;.  }.  if( i
2f360 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  Set>=0 ){.    sq
2f370 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
2f380 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2f390 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
2f3a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
2f3b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f3c0 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20  MIT_TRIGGER../* 
2f3d0 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20  Opcode: Program 
2f3e0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2f3f0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2f400 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2f410 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
2f420 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
2f430 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
2f440 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2f450 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
2f460 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
2f470 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
2f480 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
2f490 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
2f4a0 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
2f4b0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
2f4c0 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
2f4d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2f4e0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
2f4f0 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
2f500 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
2f510 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
2f520 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
2f530 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
2f540 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
2f550 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2f560 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
2f570 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
2f580 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
2f590 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
2f5a0 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
2f5b0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
2f5c0 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
2f5d0 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
2f5e0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2f5f0 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
2f600 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
2f610 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
2f620 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
2f630 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  o, then recursiv
2f640 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61  e program invoca
2f650 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e  tion is enabled.
2f660 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
2f670 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
2f680 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
2f690 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2f6a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2f6b0 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
2f6c0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
2f6d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2f6f0 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
2f700 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
2f710 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
2f720 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
2f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2f740 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
2f750 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
2f760 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
2f770 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2f780 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
2f790 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
2f7a0 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
2f7b0 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
2f7c0 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
2f7d0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
2f7e0 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
2f7f0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
2f800 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
2f810 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
2f820 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
2f830 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
2f840 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
2f850 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
2f860 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
2f870 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
2f880 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
2f890 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
2f8a0 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
2f8b0 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
2f8c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2f8d0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2f8e0 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a  am->nOp>0 );.  .
2f8f0 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66    /* If the p5 f
2f900 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68  lag is clear, th
2f910 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  en recursive inv
2f920 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
2f930 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  ers is .  ** dis
2f940 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61  abled for backwa
2f950 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
2f960 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20  y (p5 is set if 
2f970 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d  this sub-program
2f980 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  .  ** is really 
2f990 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61  a trigger, not a
2f9a0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74   foreign key act
2f9b0 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61  ion, and the fla
2f9c0 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63  g set.  ** and c
2f9d0 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50  leared by the "P
2f9e0 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f  RAGMA recursive_
2f9f0 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e  triggers" comman
2fa00 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a  d is clear)..  *
2fa10 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65  * .  ** It is re
2fa20 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
2fa30 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20  on of triggers, 
2fa40 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
2fa50 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20  , that is .  ** 
2fa60 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d  disabled. In som
2fa70 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65  e cases a single
2fa80 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e   trigger may gen
2fa90 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20  erate more than 
2faa0 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f  one .  ** SubPro
2fab0 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69  gram (if the tri
2fac0 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63  gger may be exec
2fad0 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74  uted with more t
2fae0 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e  han one differen
2faf0 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c  t .  ** ON CONFL
2fb00 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20  ICT algorithm). 
2fb10 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63  SubProgram struc
2fb20 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64  tures associated
2fb30 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e   with a.  ** sin
2fb40 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20  gle trigger all 
2fb50 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
2fb60 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50  lue for the SubP
2fb70 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20  rogram.token .  
2fb80 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f  ** variable.  */
2fb90 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
2fba0 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72  {.    t = pProgr
2fbb0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66  am->token;.    f
2fbc0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
2fbd0 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70  ame; pFrame && p
2fbe0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b  Frame->token!=t;
2fbf0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
2fc00 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66  pParent);.    if
2fc10 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b  ( pFrame ) break
2fc20 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
2fc30 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d  nFrame>=db->aLim
2fc40 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
2fc50 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29  TRIGGER_DEPTH] )
2fc60 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2fc70 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
2fc80 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
2fc90 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
2fca0 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
2fcb0 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f  ursion");.    go
2fcc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2fcd0 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
2fce0 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
2fcf0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2fd00 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2fd10 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
2fd20 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
2fd30 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
2fd40 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
2fd50 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
2fd60 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
2fd70 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
2fd80 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
2fd90 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
2fda0 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
2fdb0 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
2fdc0 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
2fdd0 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
2fde0 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
2fdf0 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
2fe00 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
2fe10 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
2fe20 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
2fe30 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
2fe40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
2fe50 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
2fe60 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
2fe70 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
2fe80 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
2fe90 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
2fea0 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
2feb0 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
2fec0 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
2fed0 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
2fee0 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
2fef0 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
2ff00 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
2ff10 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
2ff20 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
2ff30 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
2ff40 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
2ff50 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
2ff60 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2ff70 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30    assert( nMem>0
2ff80 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f   );.    if( pPro
2ff90 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20  gram->nCsr==0 ) 
2ffa0 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74  nMem++;.    nByt
2ffb0 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
2ffc0 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
2ffe0 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
2fff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
30000 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
30010 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
30020 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70 46 72 61  sor *);.    pFra
30030 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  me = sqlite3DbMa
30040 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79  llocZero(db, nBy
30050 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46  te);.    if( !pF
30060 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f  rame ){.      go
30070 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
30080 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
30090 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b  MemRelease(pRt);
300a0 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20  .    pRt->flags 
300b0 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20  = MEM_Frame;.   
300c0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d   pRt->u.pFrame =
300d0 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46   pFrame;..    pF
300e0 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
300f0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
30100 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
30110 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
30120 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
30130 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
30140 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
30150 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  aOp);.    pFrame
30160 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
30170 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
30180 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
30190 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
301a0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
301b0 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
301c0 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
301d0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
301e0 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
301f0 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
30200 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
30210 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
30220 74 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51  token;.#ifdef SQ
30230 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
30240 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
30250 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d  pFrame->anExec =
30260 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64   p->anExec;.#end
30270 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  if..    pEnd = &
30280 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
30290 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
302a0 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
302b0 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
302c0 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
302d0 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
302e0 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
302f0 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
30300 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
30310 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
30320 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
30330 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61  me = pRt->u.pFra
30340 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  me;.    assert( 
30350 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70  pProgram->nMem+p
30360 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
30370 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
30380 20 0a 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50   .        || (pP
30390 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20  rogram->nCsr==0 
303a0 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  && pProgram->nMe
303b0 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  m+1==pFrame->nCh
303c0 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61  ildMem) );.    a
303d0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
303e0 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
303f0 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20  ChildCsr );.    
30400 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f  assert( (int)(pO
30410 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65  p - aOp)==pFrame
30420 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
30430 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
30440 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
30450 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
30460 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
30470 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46   lastRowid;.  pF
30480 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
30490 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
304a0 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
304b0 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
304c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61  ;.  assert( pFra
304d0 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20  me->pAuxData==0 
304e0 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75  );.  pFrame->pAu
304f0 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44  xData = p->pAuxD
30500 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61  ata;.  p->pAuxDa
30510 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68  ta = 0;.  p->nCh
30520 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70  ange = 0;.  p->p
30530 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
30540 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d    p->aMem = aMem
30550 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28   = VdbeFrameMem(
30560 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d  pFrame);.  p->nM
30570 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
30580 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
30590 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
305a0 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
305b0 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
305c0 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
305d0 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 2d 3e  [p->nMem];.  p->
305e0 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
305f0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
30600 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
30610 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nOp;.#ifdef SQLI
30620 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
30630 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
30640 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
30650 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d  f.  pOp = &aOp[-
30660 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  1];..  break;.}.
30670 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61  ./* Opcode: Para
30680 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
30690 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
306a0 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65  is only ever pre
306b0 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67  sent in sub-prog
306c0 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20  rams called via 
306d0 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72  the .** OP_Progr
306e0 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  am instruction. 
306f0 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72  Copy a value cur
30700 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e  rently stored in
30710 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65   a memory .** ce
30720 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  ll of the callin
30730 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65  g (parent) frame
30740 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74   to cell P2 in t
30750 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
30760 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70  s .** address sp
30770 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65  ace. This is use
30780 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
30790 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20  grams to access 
307a0 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e  the new.* .** an
307b0 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a  d old.* values..
307c0 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73  **.** The addres
307d0 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e  s of the cell in
307e0 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
307f0 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
30800 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65  by adding.** the
30810 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
30820 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
30830 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
30840 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
30850 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  .** calling OP_P
30860 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
30870 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
30880 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  aram: {         
30890 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
308a0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
308b0 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
308c0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
308d0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
308e0 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
308f0 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
30900 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
30910 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
30920 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
30930 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
30940 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
30950 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
30960 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
30970 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
30980 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30990 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
309a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
309b0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
309c0 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
309d0 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
309e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
309f0 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
30a00 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
30a10 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
30a20 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
30a30 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
30a40 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
30a50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
30a60 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
30a70 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
30a80 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
30a90 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
30aa0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
30ab0 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
30ac0 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
30ad0 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
30ae0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
30af0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
30b00 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
30b10 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
30b20 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
30b30 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
30b40 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
30b50 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
30b60 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
30b70 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
30b80 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
30b90 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
30ba0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
30bb0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
30bc0 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
30bd0 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
30be0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
30bf0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
30c00 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
30c10 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
30c20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
30c30 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
30c40 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
30c50 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
30c60 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
30c70 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
30c80 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
30c90 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
30ca0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
30cb0 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
30cc0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
30cd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
30ce0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
30cf0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
30d00 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
30d10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
30d20 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
30d30 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
30d40 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
30d50 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
30d60 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
30d70 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
30d80 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
30d90 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
30da0 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
30db0 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
30dc0 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
30dd0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
30de0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
30df0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
30e00 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
30e10 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
30e20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
30e30 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
30e40 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
30e50 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
30e60 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
30e70 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
30e80 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
30e90 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
30ea0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
30eb0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
30ec0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
30ed0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
30ee0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
30ef0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
30f00 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
30f10 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e  2);.    if( p->n
30f20 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
30f30 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
30f40 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
30f50 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
30f60 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
30f70 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
30f80 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
30f90 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
30fa0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
30fb0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
30fc0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
30fd0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
30fe0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
30ff0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
31000 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
31010 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
31020 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
31030 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
31040 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
31050 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
31060 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
31070 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
31080 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
31090 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
310a0 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
310b0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
310c0 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
310d0 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
310e0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
310f0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
31100 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
31110 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
31120 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
31130 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
31140 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
31150 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
31160 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
31170 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
31180 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
31190 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
311a0 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
311b0 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
311c0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
311d0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
311e0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
311f0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
31200 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
31210 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
31220 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
31230 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
31240 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
31250 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
31260 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
31270 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
31280 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
31290 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
312a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
312b0 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
312c0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
312d0 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
312e0 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
312f0 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
31300 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31310 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
31320 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
31330 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
31340 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
31350 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
31360 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50  >0 then r[P1]-=P
31370 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3, goto P2.**.**
31380 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
31390 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
313a0 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20  eger..** If the 
313b0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
313c0 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
313d0 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50  ater, subtract P
313e0 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61  3 from the.** va
313f0 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75  lue in P1 and ju
31400 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
31410 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76  If the initial v
31420 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
31430 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
31440 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20   1, then the.** 
31450 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67  value is unchang
31460 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70  ed and control p
31470 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f  asses through to
31480 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
31490 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
314a0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
314b0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
314c0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
314d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
314e0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
314f0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
31500 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
31510 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
31520 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
31530 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  0 ){.    pIn1->u
31540 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i -= pOp->p3;. 
31550 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
31560 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
31570 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
31580 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32  ffsetLimit P1 P2
31590 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
315a0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
315b0 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  then r[P2]=r[P1]
315c0 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c  +max(0,r[P3]) el
315d0 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a  se r[P2]=(-1).**
315e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
315f0 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f  performs a commo
31600 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61  nly used computa
31610 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
31620 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e  with.** LIMIT an
31630 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73  d OFFSET process
31640 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74  .  r[P1] holds t
31650 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72  he limit counter
31660 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64  .  r[P3].** hold
31670 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75  s the offset cou
31680 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64  nter.  The opcod
31690 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63  e computes the c
316a0 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a  ombined value.**
316b0 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e   of the LIMIT an
316c0 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f  d OFFSET and sto
316d0 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69  res that value i
316e0 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b  n r[P2].  The r[
316f0 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d  P2].** value com
31700 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74  puted is the tot
31710 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
31720 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64  s that will need
31730 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65   to be.** visite
31740 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  d in order to co
31750 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79  mplete the query
31760 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d  ..**.** If r[P3]
31770 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
31780 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
31790 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46   there is no OFF
317a0 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d  SET.** and r[P2]
317b0 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
317c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c  e value of the L
317d0 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a  IMIT, r[P1]..**.
317e0 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a  ** if r[P1] is z
317f0 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
31800 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
31810 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a  e is no LIMIT.**
31820 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65   and r[P2] is se
31830 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20  t to -1. .**.** 
31840 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d  Otherwise, r[P2]
31850 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73   is set to the s
31860 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20  um of r[P1] and 
31870 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  r[P3]..*/.case O
31880 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b  P_OffsetLimit: {
31890 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32      /* in1, out2
318a0 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 31 20  , in3 */.  pIn1 
318b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
318c0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
318d0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75  [pOp->p3];.  pOu
318e0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
318f0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
31900 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
31910 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
31920 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
31930 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
31940 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
31950 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30 20 3f 20 2d  pIn1->u.i<=0 ? -
31960 31 20 3a 20 70 49 6e 31 2d 3e 75 2e 69 2b 28 70  1 : pIn1->u.i+(p
31970 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d  In3->u.i>0?pIn3-
31980 3e 75 2e 69 3a 30 29 3b 0a 20 20 62 72 65 61 6b  >u.i:0);.  break
31990 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
319a0 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20  IfNotZero P1 P2 
319b0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
319c0 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20  is: if r[P1]!=0 
319d0 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20  then r[P1]-=P3, 
319e0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
319f0 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
31a00 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
31a10 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65  r.  If the conte
31a20 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
31a30 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c  1 is.** initiall
31a40 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e 20  y nonzero, then 
31a50 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d  subtract P3 from
31a60 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
31a70 67 69 73 74 65 72 20 50 31 20 61 6e 64 0a 2a 2a  gister P1 and.**
31a80 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66   jump to P2.  If
31a90 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
31aa0 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20  initially zero, 
31ab0 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67  leave it unchang
31ac0 65 64 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20 74  ed.** and fall t
31ad0 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20  hrough..*/.case 
31ae0 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20  OP_IfNotZero: { 
31af0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
31b00 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
31b10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
31b20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
31b30 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
31b40 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
31b50 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20  en(pIn1->u.i<0, 
31b60 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
31b70 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e 31  u.i ){.     pIn1
31b80 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
31b90 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ;.     goto jump
31ba0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
31bb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
31bc0 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20  e: DecrJumpZero 
31bd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
31be0 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72  ynopsis: if (--r
31bf0 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32  [P1])==0 goto P2
31c00 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
31c10 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20  P1 must hold an 
31c20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d  integer.  Decrem
31c30 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
31c40 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
31c50 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20  then jump to P2 
31c60 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
31c70 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
31c80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
31c90 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
31ca0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
31cb0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
31cc0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31cd0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
31ce0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
31cf0 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62  n1->u.i--;.  Vdb
31d00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
31d10 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
31d20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
31d30 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
31d40 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
31d50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
31d60 53 74 65 70 30 20 2a 20 50 32 20 50 33 20 50 34  Step0 * P2 P3 P4
31d70 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
31d80 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
31d90 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
31da0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
31db0 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
31dc0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
31dd0 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
31de0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
31df0 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
31e00 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
31e10 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  f.** structure t
31e20 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
31e30 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
31e40 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
31e50 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
31e60 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
31e70 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
31e80 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
31e90 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
31ea0 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f  cessors..*/./* O
31eb0 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a  pcode: AggStep *
31ec0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
31ed0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
31ee0 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
31ef0 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
31f00 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
31f10 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
31f20 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
31f30 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
31f40 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
31f50 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
31f60 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
31f70 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61 74  t.** object that
31f80 20 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e 20   is used to run 
31f90 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52  the function.  R
31fa0 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
31fb0 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   as the accumula
31fc0 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
31fd0 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
31fe0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
31ff0 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
32000 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a  * successors..**
32010 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
32020 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64  is initially cod
32030 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70  ed as OP_AggStep
32040 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61  0.  On first eva
32050 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20  luation,.** the 
32060 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69  FuncDef stored i
32070 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65  n P4 is converte
32080 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65  d into an sqlite
32090 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a  3_context and.**
320a0 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63   the opcode is c
320b0 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73  hanged.  In this
320c0 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61   way, the initia
320d0 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  lization of the.
320e0 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ** sqlite3_conte
320f0 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20  xt only happens 
32100 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66  once, instead of
32110 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f   on each call to
32120 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e   the.** step fun
32130 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
32140 50 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20 20  P_AggStep0: {.  
32150 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
32160 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
32170 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32180 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
32190 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d  EF );.  n = pOp-
321a0 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p5;.  assert( p
321b0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
321c0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
321d0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
321e0 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
321f0 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
32200 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
32210 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
32220 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
32230 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
32240 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
32250 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
32260 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62  pCtx = sqlite3Db
32270 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20  MallocRawNN(db, 
32280 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20  sizeof(*pCtx) + 
32290 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c  (n-1)*sizeof(sql
322a0 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20  ite3_value*));. 
322b0 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67   if( pCtx==0 ) g
322c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
322d0 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20  tx->pMem = 0;.  
322e0 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f  pCtx->pFunc = pO
322f0 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70  p->p4.pFunc;.  p
32300 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29  Ctx->iOp = (int)
32310 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70  (pOp - aOp);.  p
32320 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a  Ctx->pVdbe = p;.
32330 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e    pCtx->argc = n
32340 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20  ;.  pOp->p4type 
32350 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20  = P4_FUNCCTX;.  
32360 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70  pOp->p4.pCtx = p
32370 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Ctx;.  pOp->opco
32380 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b  de = OP_AggStep;
32390 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
323a0 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74  gh into OP_AggSt
323b0 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f  ep */.}.case OP_
323c0 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
323d0 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   i;.  sqlite3_co
323e0 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d  ntext *pCtx;.  M
323f0 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
32400 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
32410 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
32420 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20  NCCTX );.  pCtx 
32430 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a  = pOp->p4.pCtx;.
32440 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
32450 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49  Op->p3];..  /* I
32460 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
32470 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74  is inside of a t
32480 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69  rigger, the regi
32490 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d  ster array in aM
324a0 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20  em[].  ** might 
324b0 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20  change from one 
324c0 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68  evaluation to th
324d0 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78  e next.  The nex
324e0 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a  t block of code.
324f0 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73    ** checks to s
32500 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74  ee if the regist
32510 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61  er array has cha
32520 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20  nged, and if so 
32530 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61  it.  ** reinitia
32540 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61  lizes the relava
32550 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  nt parts of the 
32560 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
32570 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20  object */.  if( 
32580 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d  pCtx->pMem != pM
32590 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e  em ){.    pCtx->
325a0 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20  pMem = pMem;.   
325b0 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67   for(i=pCtx->arg
325c0 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20  c-1; i>=0; i--) 
325d0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20  pCtx->argv[i] = 
325e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d  &aMem[pOp->p2+i]
325f0 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
32600 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
32610 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72  (i=0; i<pCtx->ar
32620 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  gc; i++){.    as
32630 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
32640 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20  (pCtx->argv[i]) 
32650 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
32660 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
32670 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b   pCtx->argv[i]);
32680 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70  .  }.#endif..  p
32690 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69  Mem->n++;.  sqli
326a0 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26  te3VdbeMemInit(&
326b0 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  t, db, MEM_Null)
326c0 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
326d0 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72   &t;.  pCtx->fEr
326e0 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
326f0 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d  pCtx->skipFlag =
32700 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75   0;.  (pCtx->pFu
32710 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78  nc->xSFunc)(pCtx
32720 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78  ,pCtx->argc,pCtx
32730 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a  ->argv); /* IMP:
32740 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
32750 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45  /.  if( pCtx->fE
32760 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20  rrorOrAux ){.   
32770 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72   if( pCtx->isErr
32780 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  or ){.      sqli
32790 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
327a0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
327b0 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20  lue_text(&t));. 
327c0 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e       rc = pCtx->
327d0 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
327e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
327f0 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20  mRelease(&t);.  
32800 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
32810 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
32820 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  or;.  }else{.   
32830 20 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67 73   assert( t.flags
32840 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20  ==MEM_Null );.  
32850 7d 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b  }.  if( pCtx->sk
32860 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73  ipFlag ){.    as
32870 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
32880 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
32890 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b   );.    i = pOp[
328a0 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20  -1].p1;.    if( 
328b0 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  i ) sqlite3VdbeM
328c0 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
328d0 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 62  [i], 1);.  }.  b
328e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
328f0 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
32900 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
32910 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
32920 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78  1] N=P2.**.** Ex
32930 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
32940 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
32950 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
32960 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
32970 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
32980 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
32990 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
329a0 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
329b0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
329c0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
329d0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
329e0 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
329f0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
32a00 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
32a10 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
32a20 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
32a30 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
32a40 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
32a50 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
32a60 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
32a70 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
32a80 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
32a90 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
32aa0 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
32ab0 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
32ac0 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
32ad0 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
32ae0 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
32af0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
32b00 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
32b10 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
32b20 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
32b30 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
32b40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
32b50 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
32b60 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
32b70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
32b80 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
32b90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
32ba0 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
32bb0 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41  ~(MEM_Null|MEM_A
32bc0 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  gg))==0 );.  rc 
32bd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
32be0 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70  Finalize(pMem, p
32bf0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
32c00 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
32c10 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
32c20 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
32c30 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
32c40 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  ));.    goto abo
32c50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
32c60 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
32c70 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
32c80 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
32c90 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
32ca0 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
32cb0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
32cc0 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
32cd0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
32ce0 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
32cf0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
32d00 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20  ITE_OMIT_WAL./* 
32d10 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69  Opcode: Checkpoi
32d20 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
32d30 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  **.** Checkpoint
32d40 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68   database P1. Th
32d50 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  is is a no-op if
32d60 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65   P1 is not curre
32d70 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d  ntly in.** WAL m
32d80 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50  ode. Parameter P
32d90 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49  2 is one of SQLI
32da0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
32db0 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20  SSIVE, FULL,.** 
32dc0 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e  RESTART, or TRUN
32dd0 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f  CATE.  Write 1 o
32de0 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
32df0 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
32e00 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
32e10 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
32e20 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
32e30 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
32e40 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
32e50 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
32e60 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
32e70 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
32e80 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
32e90 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
32ea0 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
32eb0 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
32ec0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
32ed0 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
32ee0 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
32ef0 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
32f00 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
32f10 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
32f20 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
32f30 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
32f40 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
32f50 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f70 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
32f80 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
32f90 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
32fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
32fb0 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
32fc0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
32fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
32fe0 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
32ff0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
33000 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
33010 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
33020 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
33030 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
33040 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
33050 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
33060 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
33070 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
33080 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
33090 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
330a0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
330b0 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20  INT_RESTART.    
330c0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
330d0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
330e0 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20  _TRUNCATE.  );. 
330f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
33100 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
33110 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
33120 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
33130 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
33140 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
33150 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61 62  E_BUSY ) goto ab
33160 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
33170 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
33180 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30  E_OK;.    aRes[0
33190 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72  ] = 1;.  }.  for
331a0 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d  (i=0, pMem = &aM
331b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33  em[pOp->p3]; i<3
331c0 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a  ; i++, pMem++){.
331d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
331e0 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
331f0 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a   (i64)aRes[i]);.
33200 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b    }    .  break;
33210 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69  .};  .#endif..#i
33220 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33230 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f  T_PRAGMA./* Opco
33240 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20  de: JournalMode 
33250 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
33260 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f  ** Change the jo
33270 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61  urnal mode of da
33280 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e  tabase P1 to P3.
33290 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20   P3 must be one 
332a0 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f  of the.** PAGER_
332b0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
332c0 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67  values. If chang
332d0 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20  ing between the 
332e0 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b  various rollback
332f0 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74  .** modes (delet
33300 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72  e, truncate, per
33310 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65  sist, off and me
33320 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61  mory), this is a
33330 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61   simple.** opera
33340 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72  tion. No IO is r
33350 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  equired..**.** I
33360 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20  f changing into 
33370 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f  or out of WAL mo
33380 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  de the procedure
33390 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
333a0 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ated..**.** Writ
333b0 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  e a string conta
333c0 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  ining the final 
333d0 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20  journal-mode to 
333e0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
333f0 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d  case OP_JournalM
33400 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74  ode: {    /* out
33410 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  2 */.  Btree *pB
33420 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
33430 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
33440 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
33450 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
33460 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33480 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
33490 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
334a0 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
334b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334c0 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
334d0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
334e0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
334f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
33500 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
33510 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
33520 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
33530 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
33540 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
33550 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
33560 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
33570 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
33580 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
33590 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
335a0 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
335b0 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
335c0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
335d0 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
335e0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
335f0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
33600 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
33610 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
33620 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
33630 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
33640 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33650 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
33660 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
33670 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
33680 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
33690 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
336a0 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
336b0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
336c0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
336d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
336e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
336f0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
33700 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
33710 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42  Only==0 );..  pB
33720 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
33730 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
33740 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
33750 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
33760 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
33770 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
33780 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
33790 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
337a0 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
337b0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
337c0 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
337d0 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
337e0 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
337f0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
33800 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33810 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
33820 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
33830 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c  Filename(pPager,
33840 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f   1);..  /* Do no
33850 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
33860 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
33870 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
33880 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
33890 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
338a0 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
338b0 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
338c0 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
338d0 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
338e0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
338f0 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71  DE_WAL.   && (sq
33900 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
33910 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20  ilename)==0     
33920 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
33930 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
33940 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
33950 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
33960 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
33970 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
33980 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
33990 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
339a0 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
339b0 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
339c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
339d0 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
339e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
339f0 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
33a00 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
33a10 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  t || db->nVdbeRe
33a20 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63  ad>1 ){.      rc
33a30 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
33a40 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
33a50 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
33a60 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61       "cannot cha
33a70 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20  nge %s wal mode 
33a80 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
33a90 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
33aa0 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47        (eNew==PAG
33ab0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
33ac0 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f  AL ? "into" : "o
33ad0 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b  ut of").      );
33ae0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
33af0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
33b00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20      }else{. .   
33b10 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47     if( eOld==PAG
33b20 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
33b30 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  AL ){.        /*
33b40 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20   If leaving WAL 
33b50 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20  mode, close the 
33b60 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63  log file. If suc
33b70 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c  cessful, the cal
33b80 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20  l.        ** to 
33b90 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20  PagerCloseWal() 
33ba0 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20  checkpoints and 
33bb0 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74  deletes the writ
33bc0 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20  e-ahead-log .   
33bd0 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e       ** file. An
33be0 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
33bf0 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c  may still be hel
33c00 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
33c10 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20  e file .        
33c20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65  ** after a succe
33c30 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20  ssful return. . 
33c40 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
33c50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61    rc = sqlite3Pa
33c60 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67  gerCloseWal(pPag
33c70 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  er);.        if(
33c80 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
33c90 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
33ca0 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
33cb0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
33cc0 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  New);.        }.
33cd0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
33ce0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
33cf0 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29  NALMODE_MEMORY )
33d00 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e  {.        /* Can
33d10 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64  not transition d
33d20 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d  irectly from MEM
33d30 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65  ORY to WAL.  Use
33d40 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20   mode OFF.      
33d50 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72    ** as an inter
33d60 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20  mediate */.     
33d70 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
33d80 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
33d90 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52  ager, PAGER_JOUR
33da0 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20  NALMODE_OFF);.  
33db0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
33dc0 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63  * Open a transac
33dd0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
33de0 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72  base file. Regar
33df0 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75  dless of the jou
33e00 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f  rnal.      ** mo
33e10 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63  de, this transac
33e20 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73  tion always uses
33e30 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
33e40 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nal..      */.  
33e50 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
33e60 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
33e70 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20  s(pBt)==0 );.   
33e80 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
33e90 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
33ea0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
33eb0 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c  eSetVersion(pBt,
33ec0 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
33ed0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
33ee0 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d  2 : 1));.      }
33ef0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
33f00 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
33f10 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a  TE_OMIT_WAL */..
33f20 20 20 69 66 28 20 72 63 20 29 20 65 4e 65 77 20    if( rc ) eNew 
33f30 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d  = eOld;.  eNew =
33f40 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
33f50 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
33f60 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f  er, eNew);..  pO
33f70 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
33f80 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
33f90 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
33fa0 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  >z = (char *)sql
33fb0 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
33fc0 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75  ame(eNew);.  pOu
33fd0 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  t->n = sqlite3St
33fe0 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b  rlen30(pOut->z);
33ff0 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
34000 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71  QLITE_UTF8;.  sq
34010 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
34020 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
34030 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72  coding);.  if( r
34040 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
34050 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
34060 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20  reak;.};.#endif 
34070 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
34080 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64  RAGMA */..#if !d
34090 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
340a0 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64  IT_VACUUM) && !d
340b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
340c0 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70  IT_ATTACH)./* Op
340d0 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20  code: Vacuum P1 
340e0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
340f0 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
34100 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 31  database P1.  P1
34110 20 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22   is 0 for "main"
34120 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a  , and 2 or more.
34130 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68  ** for an attach
34140 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  ed database.  Th
34150 65 20 22 74 65 6d 70 22 20 64 61 74 61 62 61 73  e "temp" databas
34160 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63  e may not be vac
34170 75 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  uumed..*/.case O
34180 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
34190 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
341a0 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
341b0 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
341c0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
341d0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28   pOp->p1);.  if(
341e0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
341f0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34200 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34210 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
34220 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
34230 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
34240 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
34250 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
34260 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
34270 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
34280 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
34290 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
342a0 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
342b0 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
342c0 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
342d0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
342e0 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
342f0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
34300 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
34310 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
34320 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
34330 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
34340 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
34350 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
34360 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
34370 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
34380 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
34390 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
343a0 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
343b0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
343c0 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  y==0 );.  pBt = 
343d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
343e0 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
343f0 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
34400 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65  uum(pBt);.  Vdbe
34410 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d  BranchTaken(rc==
34420 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a  SQLITE_DONE,2);.
34430 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
34440 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44  if( rc!=SQLITE_D
34450 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ONE ) goto abort
34460 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34470 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
34480 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  K;.    goto jump
34490 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
344a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
344b0 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65  * Opcode: Expire
344c0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
344d0 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69  * Cause precompi
344e0 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74  led statements t
344f0 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20  o expire.  When 
34500 61 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65  an expired state
34510 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75  ment.** is execu
34520 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ted using sqlite
34530 33 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c  3_step() it will
34540 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69   either automati
34550 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61  cally.** reprepa
34560 72 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74  re itself (if it
34570 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
34580 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71  created using sq
34590 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
345a0 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c  ()).** or it wil
345b0 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49  l fail with SQLI
345c0 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a  TE_SCHEMA..** .*
345d0 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
345e0 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
345f0 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
34600 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
34610 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
34620 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
34630 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
34640 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72  atement is expir
34650 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  ed..*/.case OP_E
34660 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21  xpire: {.  if( !
34670 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
34680 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
34690 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
346a0 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
346b0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
346c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
346d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
346e0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
346f0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62  E./* Opcode: Tab
34700 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20  leLock P1 P2 P3 
34710 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
34720 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32  : iDb=P1 root=P2
34730 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20   write=P3.**.** 
34740 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
34750 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
34760 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
34770 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
34780 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
34790 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
347a0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
347b0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
347c0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
347d0 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
347e0 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
347f0 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
34800 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
34810 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
34820 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
34830 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
34840 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
34850 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
34860 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
34870 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
34880 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
34890 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
348a0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
348b0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
348c0 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
348d0 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
348e0 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
348f0 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
34900 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
34910 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
34920 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
34930 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20  bleLock: {.  u8 
34940 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75  isWriteLock = (u
34950 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28  8)pOp->p3;.  if(
34960 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20   isWriteLock || 
34970 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  0==(db->flags&SQ
34980 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
34990 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74  tted) ){.    int
349a0 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a   p1 = pOp->p1; .
349b0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d      assert( p1>=
349c0 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20  0 && p1<db->nDb 
349d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44  );.    assert( D
349e0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
349f0 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20  eeMask, p1) );. 
34a00 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69     assert( isWri
34a10 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57  teLock==0 || isW
34a20 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20  riteLock==1 );. 
34a30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
34a40 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62  treeLockTable(db
34a50 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70  ->aDb[p1].pBt, p
34a60 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c  Op->p2, isWriteL
34a70 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ock);.    if( rc
34a80 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72   ){.      if( (r
34a90 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f  c&0xFF)==SQLITE_
34aa0 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
34ab0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
34ac0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
34ad0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
34ae0 45 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61  Error(p, "databa
34af0 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
34b00 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
34b10 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
34b20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34b30 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
34b40 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
34b50 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
34b60 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a  HARED_CACHE */..
34b70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34b80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34b90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67  ./* Opcode: VBeg
34ba0 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  in * * * P4 *.**
34bb0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
34bc0 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
34bd0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
34be0 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c  ture. If so, cal
34bf0 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e  l the .** xBegin
34c00 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
34c10 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
34c20 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e  so, whether or n
34c30 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68  ot P4 is set, ch
34c40 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73  eck that this is
34c50 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65   not being calle
34c60 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e  d from.** within
34c70 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61   a callback to a
34c80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78   virtual table x
34c90 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49  Sync() method. I
34ca0 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72  f it is, the err
34cb0 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20  or.** code will 
34cc0 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
34cd0 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65  _LOCKED..*/.case
34ce0 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20   OP_VBegin: {.  
34cf0 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20  VTable *pVTab;. 
34d00 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVTab = pOp->p4
34d10 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73  .pVtab;.  rc = s
34d20 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
34d30 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66  db, pVTab);.  if
34d40 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65  ( pVTab ) sqlite
34d50 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
34d60 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61  g(p, pVTab->pVta
34d70 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  b);.  if( rc ) g
34d80 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
34d90 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
34da0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
34db0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
34dc0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
34dd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
34de0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
34df0 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31  code: VCreate P1
34e00 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
34e10 50 32 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P2 is a register
34e20 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
34e30 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
34e40 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
34e50 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c  ase .** P1. Call
34e60 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
34e70 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
34e80 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
34e90 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20  Create: {.  Mem 
34ea0 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
34eb0 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
34ec0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
34ed0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
34ee0 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f  t char *zTab;  /
34ef0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69  * Name of the vi
34f00 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
34f10 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
34f20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
34f30 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62  ;.  sMem.db = db
34f40 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50  ;.  /* Because P
34f50 32 20 69 73 20 61 6c 77 61 79 73 20 61 20 73 74  2 is always a st
34f60 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20  atic string, it 
34f70 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
34f80 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  r the.  ** sqlit
34f90 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20  e3VdbeMemCopy() 
34fa0 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73  to fail */.  ass
34fb0 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
34fc0 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
34fd0 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Str)!=0 );.  ass
34fe0 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
34ff0 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
35000 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20  Static)!=0 );.  
35010 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
35020 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26  MemCopy(&sMem, &
35030 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
35040 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
35050 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61  LITE_OK );.  zTa
35060 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  b = (const char*
35070 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
35080 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73  ext(&sMem);.  as
35090 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62  sert( zTab || db
350a0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
350b0 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a  ;.  if( zTab ){.
350c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
350d0 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
350e0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62  b, pOp->p1, zTab
350f0 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
35100 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
35110 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
35120 6d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  m);.  if( rc ) g
35130 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35140 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
35150 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
35160 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35170 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
35180 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
35190 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
351a0 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
351b0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
351c0 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
351d0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
351e0 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
351f0 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
35200 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
35210 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
35220 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
35230 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65  oy: {.  db->nVDe
35240 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20  stroy++;.  rc = 
35250 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
35260 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
35270 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
35280 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d    db->nVDestroy-
35290 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  -;.  if( rc ) go
352a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
352b0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
352c0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
352d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
352e0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
352f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
35300 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
35310 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
35320 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
35330 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
35340 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
35350 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
35360 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
35370 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
35380 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
35390 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
353a0 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
353b0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
353c0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
353d0 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
353e0 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
353f0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
35400 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
35410 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
35420 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
35430 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
35440 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
35450 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
35460 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
35470 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
35480 20 30 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b   0;.  pVCur = 0;
35490 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
354a0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
354b0 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20  .  if( pVtab==0 
354c0 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e  || NEVER(pVtab->
354d0 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20  pModule==0) ){. 
354e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
354f0 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20  OCKED;.    goto 
35500 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
35510 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c  or;.  }.  pModul
35520 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
35530 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  le;.  rc = pModu
35540 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
35550 20 26 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69   &pVCur);.  sqli
35560 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
35570 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
35580 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
35590 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
355a0 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c  r;..  /* Initial
355b0 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
355c0 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
355d0 73 73 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70  ss */.  pVCur->p
355e0 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20  Vtab = pVtab;.. 
355f0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
35600 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
35610 74 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c  t */.  pCur = al
35620 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
35630 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20  pOp->p1, 0, -1, 
35640 43 55 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20  CURTYPE_VTAB);. 
35650 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
35660 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20   pCur->uc.pVCur 
35670 3d 20 70 56 43 75 72 3b 0a 20 20 20 20 70 56 74  = pVCur;.    pVt
35680 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65  ab->nRef++;.  }e
35690 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
356a0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
356b0 64 20 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65  d );.    pModule
356c0 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b  ->xClose(pVCur);
356d0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
356e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
356f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
35700 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
35710 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
35720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35730 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
35740 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
35750 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
35760 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50  opsis: iplan=r[P
35770 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a  3] zplan='P4'.**
35780 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
35790 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  or opened using 
357a0 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e  VOpen.  P2 is an
357b0 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
357c0 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69   to if.** the fi
357d0 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65  ltered result se
357e0 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a  t is empty..**.*
357f0 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e  * P4 is either N
35800 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20  ULL or a string 
35810 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74  that was generat
35820 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49  ed by the xBestI
35830 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  ndex.** method o
35840 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54  f the module.  T
35850 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
35860 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69  n of the P4 stri
35870 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f  ng is left.** to
35880 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
35890 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ementation..**.*
358a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
358b0 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65  vokes the xFilte
358c0 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
358d0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70  virtual table sp
358e0 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31  ecified.** by P1
358f0 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71  .  The integer q
35900 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65  uery plan parame
35910 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69  ter to xFilter i
35920 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
35930 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69  ster.** P3. Regi
35940 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73  ster P3+1 stores
35950 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
35960 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64  ter to be passed
35970 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74   to the.** xFilt
35980 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73  er method. Regis
35990 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b  ters P3+2..P3+1+
359a0 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67  argc are the arg
359b0 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  c.** additional 
359c0 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68  parameters which
359d0 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a   are passed to.*
359e0 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67  * xFilter as arg
359f0 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32  v. Register P3+2
35a00 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d   becomes argv[0]
35a10 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
35a20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41  xFilter..**.** A
35a30 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
35a40 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c   P2 if the resul
35a50 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74  t set after filt
35a60 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65  ering would be e
35a70 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mpty..*/.case OP
35a80 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a  _VFilter: {   /*
35a90 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
35aa0 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72  Arg;.  int iQuer
35ab0 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  y;.  const sqlit
35ac0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
35ad0 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72  le;.  Mem *pQuer
35ae0 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b  y;.  Mem *pArgc;
35af0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
35b00 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20  cursor *pVCur;. 
35b10 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
35b20 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73  Vtab;.  VdbeCurs
35b30 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20  or *pCur;.  int 
35b40 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  res;.  int i;.  
35b50 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20  Mem **apArg;..  
35b60 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70  pQuery = &aMem[p
35b70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
35b80 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
35b90 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
35ba0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
35bb0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
35bc0 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47  pQuery) );.  REG
35bd0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
35be0 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
35bf0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43  assert( pCur->eC
35c00 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
35c10 56 54 41 42 20 29 3b 0a 20 20 70 56 43 75 72 20  VTAB );.  pVCur 
35c20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  = pCur->uc.pVCur
35c30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 43 75  ;.  pVtab = pVCu
35c40 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
35c50 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
35c60 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
35c70 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
35c80 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
35c90 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
35ca0 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
35cb0 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
35cc0 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
35cd0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
35ce0 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
35cf0 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
35d00 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
35d10 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
35d20 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
35d30 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   */.  res = 0;. 
35d40 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
35d50 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  g;.  for(i = 0; 
35d60 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
35d70 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
35d80 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20  rgc[i+1];.  }.  
35d90 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
35da0 69 6c 74 65 72 28 70 56 43 75 72 2c 20 69 51 75  ilter(pVCur, iQu
35db0 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
35dc0 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
35dd0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
35de0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
35df0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
35e00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
35e10 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70  error;.  res = p
35e20 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43  Module->xEof(pVC
35e30 75 72 29 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  ur);.  pCur->nul
35e40 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65  lRow = 0;.  Vdbe
35e50 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
35e60 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
35e70 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
35e80 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  p2;.  break;.}.#
35e90 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
35ea0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
35eb0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
35ec0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
35ed0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
35ee0 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  : VColumn P1 P2 
35ef0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
35f00 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d  is: r[P3]=vcolum
35f10 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  n(P2).**.** Stor
35f20 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
35f30 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20  he P2-th column 
35f40 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66  of.** the row of
35f50 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
35f60 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  le that the .** 
35f70 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
35f80 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65  nting to into re
35f90 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
35fa0 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
35fb0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
35fc0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
35fd0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
35fe0 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
35ff0 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
36000 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
36010 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
36020 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
36030 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
36040 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
36050 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
36060 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AB );.  assert( 
36070 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
36080 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
36090 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
360a0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
360b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
360c0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
360d0 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20  , pDest);.  if( 
360e0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
360f0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
36100 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
36110 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
36120 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
36130 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
36140 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
36150 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
36160 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
36170 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
36180 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
36190 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
361a0 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78  ext));.  sContex
361b0 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a  t.pOut = pDest;.
361c0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
361d0 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
361e0 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  );.  rc = pModul
361f0 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
36200 3e 75 63 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e  >uc.pVCur, &sCon
36210 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
36220 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
36230 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
36240 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
36250 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
36260 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
36270 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
36280 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
36290 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c  eEncoding(pDest,
362a0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
362b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
362c0 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
362d0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
362e0 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
362f0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
36300 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
36310 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
36320 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  ig;.  }.  if( rc
36330 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
36340 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
36350 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
36360 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36370 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
36380 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36390 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
363a0 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
363b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
363c0 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
363d0 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
363e0 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
363f0 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
36400 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
36410 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
36420 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
36430 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
36440 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
36450 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
36460 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
36470 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
36480 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
36490 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
364a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
364b0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
364c0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
364d0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
364e0 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
364f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
36500 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
36510 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
36520 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
36530 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
36540 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
36550 42 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  B );.  if( pCur-
36560 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
36570 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
36580 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56  ab = pCur->uc.pV
36590 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  Cur->pVtab;.  pM
365a0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
365b0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
365c0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  ( pModule->xNext
365d0 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65   );..  /* Invoke
365e0 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74   the xNext() met
365f0 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
36600 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77  e. There is no w
36610 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ay for the.  ** 
36620 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65  underlying imple
36630 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74  mentation to ret
36640 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20  urn an error if 
36650 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e  one occurs durin
36660 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20  g.  ** xNext(). 
36670 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65  Instead, if an e
36680 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75  rror occurs, tru
36690 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69  e is returned (i
366a0 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a  ndicating that .
366b0 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61    ** data is ava
366c0 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20  ilable) and the 
366d0 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72  error code retur
366e0 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e  ned when xColumn
366f0 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74   or.  ** some ot
36700 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65  her method is ne
36710 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68  xt invoked on th
36720 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74  e save virtual t
36730 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a  able cursor..  *
36740 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  /.  rc = pModule
36750 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63  ->xNext(pCur->uc
36760 2e 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74  .pVCur);.  sqlit
36770 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
36780 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
36790 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
367a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
367b0 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c  ;.  res = pModul
367c0 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63  e->xEof(pCur->uc
367d0 2e 70 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42  .pVCur);.  VdbeB
367e0 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c  ranchTaken(!res,
367f0 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29  2);.  if( !res )
36800 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
36810 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20  e is data, jump 
36820 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74  to P2 */.    got
36830 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
36840 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
36850 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rupt;.  }.  goto
36860 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
36870 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rupt;.}.#endif /
36880 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
36890 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
368a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
368b0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
368c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
368d0 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
368e0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
368f0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
36900 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
36910 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
36920 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
36930 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
36940 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
36950 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
36960 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
36970 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
36980 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
36990 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
369a0 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
369b0 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
369c0 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
369d0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
369e0 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
369f0 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
36a00 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
36a10 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
36a20 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
36a30 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
36a40 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
36a50 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
36a60 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
36a70 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
36a80 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52  adOnly==0 );.  R
36a90 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
36aa0 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20  p->p1, pName);. 
36ab0 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e   assert( pName->
36ac0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
36ad0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
36ae0 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
36af0 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74  E_UTF8 );.  test
36b00 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
36b10 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
36b20 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
36b30 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
36b40 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
36b50 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
36b60 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
36b70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  Name, SQLITE_UTF
36b80 38 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  8);.  if( rc ) g
36b90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
36ba0 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 70  _error;.  rc = p
36bb0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
36bc0 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
36bd0 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74  ame->z);.  sqlit
36be0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
36bf0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
36c00 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
36c10 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
36c20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
36c30 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
36c40 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
36c50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
36c60 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
36c70 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
36c80 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
36c90 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33  opsis: data=r[P3
36ca0 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  @P2].**.** P4 is
36cb0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
36cc0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
36cd0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
36ce0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
36cf0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
36d00 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
36d10 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
36d20 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
36d30 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
36d40 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
36d50 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
36d60 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
36d70 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
36d80 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
36d90 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
36da0 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
36db0 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
36dc0 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
36dd0 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
36de0 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
36df0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
36e00 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
36e10 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
36e20 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
36e30 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
36e40 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
36e50 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
36e60 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
36e70 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
36e80 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
36e90 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
36ea0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
36eb0 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
36ec0 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
36ed0 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
36ee0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
36ef0 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
36f00 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
36f10 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
36f20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
36f30 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
36f40 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
36f50 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
36f60 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
36f70 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
36f80 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
36f90 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
36fa0 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
36fb0 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
36fc0 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
36fd0 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
36fe0 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
36ff0 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
37000 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
37010 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
37020 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
37030 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
37040 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
37050 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
37060 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
37070 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
37080 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
37090 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
370a0 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
370b0 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
370c0 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  erted..**.** P5 
370d0 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74  is the error act
370e0 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65  ions (OE_Replace
370f0 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67  , OE_Fail, OE_Ig
37100 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a  nore, etc) to.**
37110 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61   apply in the ca
37120 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69  se of a constrai
37130 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e  nt failure on an
37140 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
37150 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55  e..*/.case OP_VU
37160 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74  pdate: {.  sqlit
37170 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
37180 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
37190 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
371a0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
371b0 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69  nt i;.  sqlite_i
371c0 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65  nt64 rowid;.  Me
371d0 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d  m **apArg;.  Mem
371e0 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pX;..  assert(
371f0 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20   pOp->p2==1     
37200 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
37210 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d  E_Fail   || pOp-
37220 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b  >p5==OE_Rollback
37230 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d   .       || pOp-
37240 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c  >p5==OE_Abort ||
37250 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e   pOp->p5==OE_Ign
37260 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ore || pOp->p5==
37270 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a  OE_Replace.  );.
37280 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
37290 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56  dOnly==0 );.  pV
372a0 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
372b0 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66  tab->pVtab;.  if
372c0 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45  ( pVtab==0 || NE
372d0 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75  VER(pVtab->pModu
372e0 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  le==0) ){.    rc
372f0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
37300 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
37310 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
37320 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70   }.  pModule = p
37330 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
37340 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
37350 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37360 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
37370 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
37380 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
37390 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62  ) ){.    u8 vtab
373a0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d  OnConflict = db-
373b0 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b  >vtabOnConflict;
373c0 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
373d0 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
373e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
373f0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
37400 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
37410 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
37420 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20  lid(pX) );.     
37430 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
37440 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20  e(p, pX);.      
37450 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
37460 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
37470 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
37480 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70  onflict = pOp->p
37490 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  5;.    rc = pMod
374a0 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
374b0 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
374c0 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62   &rowid);.    db
374d0 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
374e0 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63   = vtabOnConflic
374f0 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  t;.    sqlite3Vt
37500 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
37510 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
37520 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
37530 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
37540 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
37550 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
37560 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
37570 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
37580 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
37590 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
375a0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
375b0 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
375c0 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
375d0 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
375e0 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
375f0 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
37600 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
37610 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
37620 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
37630 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
37640 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
37650 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
37660 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
37670 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
37680 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
37690 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
376a0 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
376b0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
376c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
376d0 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
376e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
376f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37700 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
37710 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
37720 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
37730 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e  Opcode: Pagecoun
37740 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
37750 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
37760 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  rrent number of 
37770 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73  pages in databas
37780 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63  e P1 to memory c
37790 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ell P2..*/.case 
377a0 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20  OP_Pagecount: { 
377b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
377c0 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
377d0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
377e0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
377f0 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
37800 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44  eLastPage(db->aD
37810 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b  b[pOp->p1].pBt);
37820 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
37830 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51  if...#ifndef  SQ
37840 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
37850 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
37860 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50  e: MaxPgcnt P1 P
37870 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
37880 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61  ry to set the ma
37890 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
378a0 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
378b0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
378c0 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c   P3..** Do not l
378d0 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
378e0 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62  age count fall b
378f0 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74  elow the current
37900 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a   page count and.
37910 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ** do not change
37920 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
37930 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66  e count value if
37940 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74   P3==0..**.** St
37950 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ore the maximum 
37960 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72  page count after
37970 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72   the change in r
37980 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
37990 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a  ase OP_MaxPgcnt:
379a0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
379b0 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69 67   out2 */.  unsig
379c0 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a  ned int newMax;.
379d0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
379e0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
379f0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
37a00 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
37a10 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
37a20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66  newMax = 0;.  if
37a30 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
37a40 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65   newMax = sqlite
37a50 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70  3BtreeLastPage(p
37a60 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77  Bt);.    if( new
37a70 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29  Max < (unsigned)
37a80 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78  pOp->p3 ) newMax
37a90 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   = (unsigned)pOp
37aa0 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->p3;.  }.  pOut
37ab0 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
37ac0 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74  treeMaxPageCount
37ad0 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20  (pBt, newMax);. 
37ae0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
37af0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  .../* Opcode: In
37b00 69 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  it P1 P2 * P4 *.
37b10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 53 74 61  ** Synopsis: Sta
37b20 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50  rt at P2.**.** P
37b30 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20  rograms contain 
37b40 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
37b50 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  e of this opcode
37b60 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72   as the very fir
37b70 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a  st.** opcode..**
37b80 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
37b90 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
37ba0 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
37bb0 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
37bc0 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
37bd0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
37be0 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
37bf0 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
37c00 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69  allback..** Or i
37c10 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75  f P4 is blank, u
37c20 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  se the string re
37c30 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
37c40 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  3_sql()..**.** I
37c50 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P2 is not zero
37c60 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
37c70 63 74 69 6f 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ction P2..**.** 
37c80 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61  Increment the va
37c90 6c 75 65 20 6f 66 20 50 31 20 73 6f 20 74 68 61  lue of P1 so tha
37ca0 74 20 4f 50 5f 4f 6e 63 65 20 6f 70 63 6f 64 65  t OP_Once opcode
37cb0 73 20 77 69 6c 6c 20 6a 75 6d 70 20 74 68 65 0a  s will jump the.
37cc0 2a 2a 20 66 69 72 73 74 20 74 69 6d 65 20 74 68  ** first time th
37cd0 65 79 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ey are evaluated
37ce0 20 66 6f 72 20 74 68 69 73 20 72 75 6e 2e 0a 2a   for this run..*
37cf0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20  /.case OP_Init: 
37d00 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  {          /* ju
37d10 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  mp */.  char *zT
37d20 72 61 63 65 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a  race;.  int i;..
37d30 20 20 2f 2a 20 49 66 20 74 68 65 20 50 34 20 61    /* If the P4 a
37d40 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 4e  rgument is not N
37d50 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 6d 75 73  ULL, then it mus
37d60 74 20 62 65 20 61 6e 20 53 51 4c 20 63 6f 6d 6d  t be an SQL comm
37d70 65 6e 74 20 73 74 72 69 6e 67 2e 0a 20 20 2a 2a  ent string..  **
37d80 20 54 68 65 20 22 2d 2d 22 20 73 74 72 69 6e 67   The "--" string
37d90 20 69 73 20 62 72 6f 6b 65 6e 20 75 70 20 74 6f   is broken up to
37da0 20 70 72 65 76 65 6e 74 20 66 61 6c 73 65 2d 70   prevent false-p
37db0 6f 73 69 74 69 76 65 73 20 77 69 74 68 20 73 72  ositives with sr
37dc0 63 63 6b 31 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a  cck1.c..  **.  *
37dd0 2a 20 54 68 69 73 20 61 73 73 65 72 74 28 29 20  * This assert() 
37de0 70 72 6f 76 69 64 65 73 20 65 76 69 64 65 6e 63  provides evidenc
37df0 65 20 66 6f 72 3a 0a 20 20 2a 2a 20 45 56 49 44  e for:.  ** EVID
37e00 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 30 36 37 36  ENCE-OF: R-50676
37e10 2d 30 39 38 36 30 20 54 68 65 20 63 61 6c 6c 62  -09860 The callb
37e20 61 63 6b 20 63 61 6e 20 63 6f 6d 70 75 74 65 20  ack can compute 
37e30 74 68 65 20 73 61 6d 65 20 74 65 78 74 20 74 68  the same text th
37e40 61 74 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 68 61  at.  ** would ha
37e50 76 65 20 62 65 65 6e 20 72 65 74 75 72 6e 65 64  ve been returned
37e60 20 62 79 20 74 68 65 20 6c 65 67 61 63 79 20 73   by the legacy s
37e70 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 20 69  qlite3_trace() i
37e80 6e 74 65 72 66 61 63 65 20 62 79 0a 20 20 2a 2a  nterface by.  **
37e90 20 75 73 69 6e 67 20 74 68 65 20 58 20 61 72 67   using the X arg
37ea0 75 6d 65 6e 74 20 77 68 65 6e 20 58 20 62 65 67  ument when X beg
37eb0 69 6e 73 20 77 69 74 68 20 22 2d 2d 22 20 61 6e  ins with "--" an
37ec0 64 20 69 6e 76 6f 6b 69 6e 67 0a 20 20 2a 2a 20  d invoking.  ** 
37ed0 73 71 6c 69 74 65 33 5f 65 78 70 61 6e 64 65 64  sqlite3_expanded
37ee0 5f 73 71 6c 28 50 29 20 6f 74 68 65 72 77 69 73  _sql(P) otherwis
37ef0 65 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  e..  */.  assert
37f00 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
37f10 7c 20 73 74 72 6e 63 6d 70 28 70 4f 70 2d 3e 70  | strncmp(pOp->p
37f20 34 2e 7a 2c 20 22 2d 22 20 22 2d 20 22 2c 20 33  4.z, "-" "- ", 3
37f30 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
37f40 28 20 70 4f 70 3d 3d 70 2d 3e 61 4f 70 20 29 3b  ( pOp==p->aOp );
37f50 20 20 2f 2a 20 41 6c 77 61 79 73 20 69 6e 73 74    /* Always inst
37f60 72 75 63 74 69 6f 6e 20 30 20 2a 2f 0a 0a 23 69  ruction 0 */..#i
37f70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37f80 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 28 64  T_TRACE.  if( (d
37f90 62 2d 3e 6d 54 72 61 63 65 20 26 20 28 53 51 4c  b->mTrace & (SQL
37fa0 49 54 45 5f 54 52 41 43 45 5f 53 54 4d 54 7c 53  ITE_TRACE_STMT|S
37fb0 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
37fc0 43 59 29 29 21 3d 30 0a 20 20 20 26 26 20 21 70  CY))!=0.   && !p
37fd0 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20  ->doingRerun.   
37fe0 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
37ff0 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
38000 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
38010 3d 30 0a 20 20 29 7b 0a 23 69 66 6e 64 65 66 20  =0.  ){.#ifndef 
38020 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
38030 45 43 41 54 45 44 0a 20 20 20 20 69 66 28 20 64  ECATED.    if( d
38040 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49  b->mTrace & SQLI
38050 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
38060 29 7b 0a 20 20 20 20 20 20 76 6f 69 64 20 28 2a  ){.      void (*
38070 78 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  x)(void*,const c
38080 68 61 72 2a 29 20 3d 20 28 76 6f 69 64 28 2a 29  har*) = (void(*)
38090 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
380a0 72 2a 29 29 64 62 2d 3e 78 54 72 61 63 65 3b 0a  r*))db->xTrace;.
380b0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20        char *z = 
380c0 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e  sqlite3VdbeExpan
380d0 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b  dSql(p, zTrace);
380e0 0a 20 20 20 20 20 20 78 28 64 62 2d 3e 70 54 72  .      x(db->pTr
380f0 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20  aceArg, z);.    
38100 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
38110 29 3b 0a 20 20 20 20 7d 65 6c 73 65 0a 23 65 6e  );.    }else.#en
38120 64 69 66 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  dif.    {.      
38130 28 76 6f 69 64 29 64 62 2d 3e 78 54 72 61 63 65  (void)db->xTrace
38140 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 54  (SQLITE_TRACE_ST
38150 4d 54 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72  MT, db->pTraceAr
38160 67 2c 20 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  g, p, zTrace);. 
38170 20 20 20 7d 0a 20 20 7d 0a 23 69 66 64 65 66 20     }.  }.#ifdef 
38180 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
38190 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20  _TRACE.  zTrace 
381a0 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
381b0 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
381c0 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63  ql);.  if( zTrac
381d0 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a  e ){.    int j;.
381e0 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64      for(j=0; j<d
381f0 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20  b->nDb; j++){.  
38200 20 20 20 20 69 66 28 20 44 62 4d 61 73 6b 54 65      if( DbMaskTe
38210 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
38220 20 6a 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75   j)==0 ) continu
38230 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
38240 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
38250 2c 20 64 62 2d 3e 61 44 62 5b 6a 5d 2e 7a 44 62  , db->aDb[j].zDb
38260 53 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  SName, SQLITE_FC
38270 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63  NTL_TRACE, zTrac
38280 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  e);.    }.  }.#e
38290 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
382a0 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a  SE_FCNTL_TRACE *
382b0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
382c0 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d  DEBUG.  if( (db-
382d0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
382e0 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20  SqlTrace)!=0.   
382f0 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
38300 70 2d 3e 70 34 2e 7a 20