/ Hex Artifact Content
Login

Artifact 10880af9bbd7e19eda4db1ed7a3f2dd1b645f858:


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 20 20 28 28 44 42 29 2d  OOK(DB)   ((DB)-
0d20: 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
0d30: 61 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61  ack||(DB)->xUpda
0d40: 74 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73  teCallback).#els
0d50: 65 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55  e.# define HAS_U
0d60: 50 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20  PDATE_HOOK(DB)  
0d70: 28 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61  ((DB)->xUpdateCa
0d80: 6c 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a  llback).#endif..
0d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67  /*.** The next g
0da0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69  lobal variable i
0db0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61  s incremented ea
0dc0: 63 68 20 74 69 6d 65 20 74 68 65 20 4f 50 5f 46  ch time the OP_F
0dd0: 6f 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  ound opcode.** i
0de0: 73 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73  s executed. This
0df0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
0e00: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
0e10: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  the foreign key.
0e20: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70  ** operation imp
0e30: 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f  lemented using O
0e40: 50 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f  P_FkIsZero is wo
0e50: 72 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69  rking. This vari
0e60: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
0e70: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
0e80: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
0e90: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ea0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
0eb0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0ec0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0ed0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75  .int sqlite3_fou
0ee0: 6e 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65  nd_count = 0;.#e
0ef0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  ndif../*.** Test
0f00: 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73   a register to s
0f10: 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73  ee if it exceeds
0f20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78   the current max
0f30: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
0f40: 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72  ** If it does, r
0f50: 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61  ecord the new ma
0f60: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0f70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0f80: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
0f90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fa0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
0fb0: 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41  T).# define UPDA
0fc0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
0fd0: 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  P)  updateMaxBlo
0fe0: 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23  bsize(P).#else.#
0ff0: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1000: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23  AX_BLOBSIZE(P).#
1010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76  endif../*.** Inv
1020: 6f 6b 65 20 74 68 65 20 56 44 42 45 20 63 6f 76  oke the VDBE cov
1030: 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20  erage callback, 
1040: 69 66 20 74 68 61 74 20 63 61 6c 6c 62 61 63 6b  if that callback
1050: 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
1060: 69 73 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  is.** feature is
1070: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 20 73   used for test s
1080: 75 69 74 65 20 76 61 6c 69 64 61 74 69 6f 6e 20  uite validation 
1090: 6f 6e 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f  only and does no
10a0: 74 20 61 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70  t appear an.** p
10b0: 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 73  roduction builds
10c0: 2e 0a 2a 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20  ..**.** M is an 
10d0: 69 6e 74 65 67 65 72 2c 20 32 20 6f 72 20 33 2c  integer, 2 or 3,
10e0: 20 74 68 61 74 20 69 6e 64 69 63 65 73 20 68 6f   that indices ho
10f0: 77 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  w many different
1100: 20 77 61 79 73 20 74 68 65 0a 2a 2a 20 62 72 61   ways the.** bra
1110: 6e 63 68 20 63 61 6e 20 67 6f 2e 20 20 49 74 20  nch can go.  It 
1120: 69 73 20 75 73 75 61 6c 6c 79 20 32 2e 20 20 22  is usually 2.  "
1130: 49 22 20 69 73 20 74 68 65 20 64 69 72 65 63 74  I" is the direct
1140: 69 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 2a  ion the branch.*
1150: 2a 20 67 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73  * goes.  0 means
1160: 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20   falls through. 
1170: 20 31 20 6d 65 61 6e 73 20 62 72 61 6e 63 68 20   1 means branch 
1180: 69 73 20 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61  is taken.  2 mea
1190: 6e 73 20 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64  ns the.** second
11a0: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 62 72 61   alternative bra
11b0: 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a  nch is taken..**
11c0: 0a 2a 2a 20 69 53 72 63 4c 69 6e 65 20 69 73 20  .** iSrcLine is 
11d0: 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
11e0: 6c 69 6e 65 20 28 66 72 6f 6d 20 74 68 65 20 5f  line (from the _
11f0: 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74  _LINE__ macro) t
1200: 68 61 74 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  hat.** generated
1210: 20 74 68 65 20 56 44 42 45 20 69 6e 73 74 72 75   the VDBE instru
1220: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73  ction.  This ins
1230: 74 72 75 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73  trumentation ass
1240: 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a  umes that all.**
1250: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 69 73 20   source code is 
1260: 69 6e 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  in a single file
1270: 20 28 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69   (the amalgamati
1280: 6f 6e 29 2e 20 20 53 70 65 63 69 61 6c 20 76 61  on).  Special va
1290: 6c 75 65 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20  lues 1.** and 2 
12a0: 66 6f 72 20 74 68 65 20 69 53 72 63 4c 69 6e 65  for the iSrcLine
12b0: 20 70 61 72 61 6d 65 74 65 72 20 6d 65 61 6e 20   parameter mean 
12c0: 74 68 61 74 20 74 68 69 73 20 70 61 72 74 69 63  that this partic
12d0: 75 6c 61 72 20 62 72 61 6e 63 68 20 69 73 0a 2a  ular branch is.*
12e0: 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f  * always taken o
12f0: 72 20 6e 65 76 65 72 20 74 61 6b 65 6e 2c 20 72  r never taken, r
1300: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
1310: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1320: 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1330: 45 29 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65  E).# define Vdbe
1340: 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29  BranchTaken(I,M)
1350: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1360: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1370: 49 2c 4d 29 20 76 64 62 65 54 61 6b 65 42 72 61  I,M) vdbeTakeBra
1380: 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e  nch(pOp->iSrcLin
1390: 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74 69 63 20  e,I,M).  static 
13a0: 76 6f 69 64 20 76 64 62 65 54 61 6b 65 42 72 61  void vdbeTakeBra
13b0: 6e 63 68 28 69 6e 74 20 69 53 72 63 4c 69 6e 65  nch(int iSrcLine
13c0: 2c 20 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20  , u8 I, u8 M){. 
13d0: 20 20 20 69 66 28 20 69 53 72 63 4c 69 6e 65 3c     if( iSrcLine<
13e0: 3d 32 20 26 26 20 41 4c 57 41 59 53 28 69 53 72  =2 && ALWAYS(iSr
13f0: 63 4c 69 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20  cLine>0) ){.    
1400: 20 20 4d 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a    M = iSrcLine;.
1410: 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1420: 74 68 65 20 74 72 75 74 68 20 6f 66 20 56 64 62  the truth of Vdb
1430: 65 43 6f 76 65 72 61 67 65 41 6c 77 61 79 73 54  eCoverageAlwaysT
1440: 61 6b 65 6e 28 29 20 61 6e 64 20 0a 20 20 20 20  aken() and .    
1450: 20 20 2a 2a 20 56 64 62 65 43 6f 76 65 72 61 67    ** VdbeCoverag
1460: 65 4e 65 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f  eNeverTaken() */
1470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1480: 4d 20 26 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20  M & I)==I );.   
1490: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
14a0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
14b0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
14c0: 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 20 20  h==0 ) return;  
14d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
14e0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
14f0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
1500: 68 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  h(sqlite3GlobalC
1510: 6f 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e 63  onfig.pVdbeBranc
1520: 68 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  hArg,.          
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 20 20 20 69 53 72 63              iSrc
1550: 4c 69 6e 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d  Line,I,M);.    }
1560: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  .  }.#endif../*.
1570: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1580: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1590: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
15a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
15b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
15c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
15d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
15e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
15f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1600: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1610: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1620: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1630: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1640: 50 2c 65 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20  P,enc,0)) \.    
1650: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
1660: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
1670: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
1680: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
1690: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
16a0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
16b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
16c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
16d0: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
16e0: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
16f0: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1700: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1710: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1720: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1730: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1740: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1750: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
1760: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
1770: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
1780: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
1790: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
17a0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
17b0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
17c0: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
17d0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
17e0: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
17f0: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1800: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1810: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1820: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1830: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1840: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 77   into a string w
1850: 69 74 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c  ith P.z==P.zMall
1860: 6f 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  oc..*/.#define D
1870: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29  eephemeralize(P)
1880: 20 5c 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e   \.   if( ((P)->
1890: 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29  flags&MEM_Ephem)
18a0: 21 3d 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20  !=0 \.       && 
18b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
18c0: 6b 65 57 72 69 74 65 61 62 6c 65 28 50 29 20 29  keWriteable(P) )
18d0: 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a  { goto no_mem;}.
18e0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
18f0: 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61  if the cursor wa
1900: 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74  s opened using t
1910: 68 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72  he OP_OpenSorter
1920: 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66   opcode. */.#def
1930: 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29 20  ine isSorter(x) 
1940: 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d 30  ((x)->pSorter!=0
1950: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  )../*.** Allocat
1960: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
1970: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
1980: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
1990: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
19a0: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
19b0: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
19c0: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
19d0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
19e0: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
19f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a00: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
1a10: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a30: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
1a40: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
1a50: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
1a60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a70: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a80: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1a90: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
1aa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1ab0: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
1ac0: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
1ad0: 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42   -1 */.  int isB
1ae0: 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f  treeCursor     /
1af0: 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65  * True for B-Tre
1b00: 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73  e.  False for ps
1b10: 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74  eudo-table or vt
1b20: 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69  ab */.){.  /* Fi
1b30: 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  nd the memory ce
1b40: 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ll that will be 
1b50: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b60: 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79  e blob of memory
1b70: 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66  .  ** required f
1b80: 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73  or this VdbeCurs
1b90: 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74  or structure. It
1ba0: 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74   is convenient t
1bb0: 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64  o use a .  ** vd
1bc0: 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  be memory cell t
1bd0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d  o manage the mem
1be0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
1bf0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20  equired for a.  
1c00: 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  ** VdbeCursor st
1c10: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20  ructure for the 
1c20: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e  following reason
1c30: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s:.  **.  **   *
1c40: 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f   Sometimes curso
1c50: 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  r numbers are us
1c60: 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20  ed for a couple 
1c70: 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a  of different.  *
1c80: 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69  *     purposes i
1c90: 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d  n a vdbe program
1ca0: 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20  . The different 
1cb0: 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69  uses might requi
1cc0: 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66  re.  **     diff
1cd0: 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f  erent sized allo
1ce0: 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20  cations. Memory 
1cf0: 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72  cells provide gr
1d00: 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20  owable.  **     
1d10: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a  allocations..  *
1d20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20  *.  **   * When 
1d30: 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d  using ENABLE_MEM
1d40: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20  ORY_MANAGEMENT, 
1d50: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66  memory cell buff
1d60: 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20  ers can.  **    
1d70: 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79   be freed lazily
1d80: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33   via the sqlite3
1d90: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1da0: 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a  ) API. This.  **
1db0: 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74       minimizes t
1dc0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c  he number of mal
1dd0: 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62  loc calls made b
1de0: 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20  y the system..  
1df0: 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63  **.  ** Memory c
1e00: 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73  ells for cursors
1e10: 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61   are allocated a
1e20: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
1e30: 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70   address.  ** sp
1e40: 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ace. Memory cell
1e50: 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65   (p->nMem) corre
1e60: 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72  sponds to cursor
1e70: 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20   0. Space for.  
1e80: 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d  ** cursor 1 is m
1e90: 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79  anaged by memory
1ea0: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31   cell (p->nMem-1
1eb0: 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d  ), etc..  */.  M
1ec0: 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  em *pMem = &p->a
1ed0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72  Mem[p->nMem-iCur
1ee0: 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ];..  int nByte;
1ef0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f00: 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20  Cx = 0;.  nByte 
1f10: 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28  = .      ROUND8(
1f20: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f30: 72 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75  r)) + 2*sizeof(u
1f40: 33 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20  32)*nField + .  
1f50: 20 20 20 20 28 69 73 42 74 72 65 65 43 75 72 73      (isBtreeCurs
1f60: 6f 72 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43  or?sqlite3BtreeC
1f70: 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a  ursorSize():0);.
1f80: 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72 3c  .  assert( iCur<
1f90: 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1fa0: 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  if( p->apCsr[iCu
1fb0: 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  r] ){.    sqlite
1fc0: 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1fd0: 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72  p, p->apCsr[iCur
1fe0: 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72  ]);.    p->apCsr
1ff0: 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a  [iCur] = 0;.  }.
2000: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
2010: 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43  =sqlite3VdbeMemC
2020: 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d  learAndResize(pM
2030: 65 6d 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20  em, nByte) ){.  
2040: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2050: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2060: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
2070: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
2080: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
2090: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
20a0: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
20b0: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
20c0: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73 42  eld;.    if( isB
20d0: 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20 20  treeCursor ){.  
20e0: 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f 72      pCx->pCursor
20f0: 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20   = (BtCursor*). 
2100: 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e           &pMem->
2110: 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  z[ROUND8(sizeof(
2120: 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73  VdbeCursor))+2*s
2130: 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c  izeof(u32)*nFiel
2140: 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  d];.      sqlite
2150: 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f  3BtreeCursorZero
2160: 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  (pCx->pCursor);.
2170: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
2180: 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn pCx;.}../*.**
2190: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
21a0: 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  a value into a n
21b0: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
21c0: 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a  ation if we can.
21d0: 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74  ** do so without
21e0: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
21f0: 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
2200: 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74  words, if the st
2210: 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69  ring.** looks li
2220: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e  ke a number, con
2230: 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e  vert it into a n
2240: 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f  umber.  If it do
2250: 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c  es not.** look l
2260: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65  ike a number, le
2270: 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a  ave it alone..**
2280: 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79 46  .** If the bTryF
2290: 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74 72  orInt flag is tr
22a0: 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20 65  ue, then extra e
22b0: 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74 6f  ffort is made to
22c0: 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65   give.** an inte
22d0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
22e0: 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68 61  on.  Strings tha
22f0: 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61  t look like floa
2300: 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61  ting point.** va
2310: 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20 68  lues but which h
2320: 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61  ave no fractiona
2330: 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61  l component (exa
2340: 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a  mple: '48.00').*
2350: 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d 45  * will have a ME
2360: 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74 61  M_Int representa
2370: 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46 6f  tion when bTryFo
2380: 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a  rInt is true..**
2390: 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49 6e  .** If bTryForIn
23a0: 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e  t is false, then
23b0: 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73 74   if the input st
23c0: 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 20  ring contains a 
23d0: 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74  decimal.** point
23e0: 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20   or exponential 
23f0: 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72 65  notation, the re
2400: 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d  sult is only MEM
2410: 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69  _Real, even.** i
2420: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65 78  f there is an ex
2430: 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70 72  act integer repr
2440: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2450: 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73  e quantity..*/.s
2460: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2470: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2480: 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20 62  Mem *pRec, int b
2490: 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f  TryForInt){.  do
24a0: 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20 69  uble rValue;.  i
24b0: 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38 20  64 iValue;.  u8 
24c0: 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b  enc = pRec->enc;
24d0: 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65 63  .  assert( (pRec
24e0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
24f0: 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  tr|MEM_Int|MEM_R
2500: 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  eal))==MEM_Str )
2510: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  ;.  if( sqlite3A
2520: 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56  toF(pRec->z, &rV
2530: 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65  alue, pRec->n, e
2540: 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nc)==0 ) return;
2550: 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65  .  if( 0==sqlite
2560: 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c  3Atoi64(pRec->z,
2570: 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &iValue, pRec->
2580: 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20 70  n, enc) ){.    p
2590: 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75  Rec->u.i = iValu
25a0: 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  e;.    pRec->fla
25b0: 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  gs |= MEM_Int;. 
25c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65 63   }else{.    pRec
25d0: 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a  ->u.r = rValue;.
25e0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
25f0: 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20  |= MEM_Real;.   
2600: 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74 20   if( bTryForInt 
2610: 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  ) sqlite3VdbeInt
2620: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2630: 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  c);.  }.}../*.**
2640: 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64   Processing is d
2650: 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20  etermine by the 
2660: 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74  affinity paramet
2670: 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  er:.**.** SQLITE
2680: 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a  _AFF_INTEGER:.**
2690: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
26a0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
26b0: 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54  NUMERIC:.**    T
26c0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52  ry to convert pR
26d0: 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ec to an integer
26e0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
26f0: 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61  or a .**    floa
2700: 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65  ting-point repre
2710: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20  sentation if an 
2720: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2730: 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20  tation.**    is 
2740: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e  not possible.  N
2750: 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ote that the 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 69 73 0a 2a 2a 20 20 20 20 61 6c 77  ion is.**    alw
2780: 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65  ays preferred, e
2790: 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e  ven if the affin
27a0: 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63  ity is REAL, bec
27b0: 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e  ause.**    an in
27c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
27d0: 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61  tion is more spa
27e0: 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20  ce efficient on 
27f0: 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  disk..**.** SQLI
2800: 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20  TE_AFF_TEXT:.** 
2810: 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20     Convert pRec 
2820: 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73  to a text repres
2830: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2840: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a  SQLITE_AFF_NONE:
2850: 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70  .**    No-op.  p
2860: 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64  Rec is unchanged
2870: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
2880: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a   applyAffinity(.
2890: 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20    Mem *pRec,    
28a0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c        /* The val
28b0: 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ue to apply affi
28c0: 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61  nity to */.  cha
28d0: 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20  r affinity,     
28e0: 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
28f0: 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
2900: 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20  /.  u8 enc      
2910: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
2920: 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  his text encodin
2930: 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66  g */.){.  if( af
2940: 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
2950: 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
2960: 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69    assert( affini
2970: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  ty==SQLITE_AFF_I
2980: 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69  NTEGER || affini
2990: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  ty==SQLITE_AFF_R
29a0: 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  EAL.            
29b0: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
29c0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
29d0: 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65   );.    if( (pRe
29e0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  c->flags & MEM_I
29f0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
2a00: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
2a10: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
2a20: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
2a30: 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
2a40: 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65  _Str ) applyNume
2a50: 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63  ricAffinity(pRec
2a60: 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ,1);.      }else
2a70: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
2a80: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
2a90: 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20  nity(pRec);.    
2aa0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
2ab0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d  e if( affinity==
2ac0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
2ad0: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
2ae0: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
2af0: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
2b00: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
2b10: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
2b20: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2b30: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
2b40: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
2b50: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
2b60: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
2b70: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
2b80: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
2b90: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2ba0: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
2bb0: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
2bc0: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
2bd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2be0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
2bf0: 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20  enc, 1);.    }. 
2c00: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
2c10: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
2c20: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
2c30: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
2c40: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
2c50: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2c60: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
2c70: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
2c80: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
2c90: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
2ca0: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
2cb0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
2cc0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
2cd0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
2ce0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
2cf0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
2d00: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
2d10: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
2d20: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2d30: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2d40: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2d50: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74  ue *pVal){.  int
2d60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2d70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2d80: 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d  );.  if( eType==
2d90: 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20  SQLITE_TEXT ){. 
2da0: 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28     Mem *pMem = (
2db0: 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61  Mem*)pVal;.    a
2dc0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2dd0: 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20  ity(pMem, 0);.  
2de0: 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65    eType = sqlite
2df0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2e00: 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  l);.  }.  return
2e10: 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   eType;.}../*.**
2e20: 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f   Exported versio
2e30: 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69  n of applyAffini
2e40: 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77  ty(). This one w
2e50: 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f  orks on sqlite3_
2e60: 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20  value*, .** not 
2e70: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d  the internal Mem
2e80: 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20  * type..*/.void 
2e90: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
2ea0: 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c  yAffinity(.  sql
2eb0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
2ec0: 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79  , .  u8 affinity
2ed0: 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20  , .  u8 enc.){. 
2ee0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28   applyAffinity((
2ef0: 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69  Mem *)pVal, affi
2f00: 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f  nity, enc);.}../
2f10: 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e  *.** pMem curren
2f20: 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61  tly only holds a
2f30: 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72   string type (or
2f40: 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68   maybe a BLOB th
2f50: 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74  at we can.** int
2f60: 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69  erpret as a stri
2f70: 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f  ng if we want to
2f80: 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20  ).  Compute its 
2f90: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
2fa0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69   numeric type, i
2fb0: 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20  f has one.  Set 
2fc0: 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e  the pMem->u.r an
2fd0: 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c  d pMem->u.i fiel
2fe0: 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c  ds.** accordingl
2ff0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3000: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
3010: 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54   computeNumericT
3020: 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ype(Mem *pMem){.
3030: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
3040: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3050: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
3060: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
3070: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3080: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21  _Str|MEM_Blob))!
3090: 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  =0 );.  if( sqli
30a0: 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c  te3AtoF(pMem->z,
30b0: 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65   &pMem->u.r, pMe
30c0: 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29  m->n, pMem->enc)
30d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
30e0: 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  n 0;.  }.  if( s
30f0: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65  qlite3Atoi64(pMe
3100: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69  m->z, &pMem->u.i
3110: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3120: 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  >enc)==SQLITE_OK
3130: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d   ){.    return M
3140: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65  EM_Int;.  }.  re
3150: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d  turn MEM_Real;.}
3160: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
3170: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
3180: 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72  for pMem, either
3190: 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f   MEM_Int or MEM_
31a0: 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a  Real or both or.
31b0: 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a  ** none.  .**.**
31c0: 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d   Unlike applyNum
31d0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20  ericAffinity(), 
31e0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  this routine doe
31f0: 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65  s not modify pMe
3200: 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74  m->flags..** But
3210: 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65   it does set pMe
3220: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
3230: 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65  >u.i appropriate
3240: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
3250: 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  6 numericType(Me
3260: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
3270: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3280: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
3290: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70   ){.    return p
32a0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
32b0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b  M_Int|MEM_Real);
32c0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d  .  }.  if( pMem-
32d0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
32e0: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20  r|MEM_Blob) ){. 
32f0: 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74     return comput
3300: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65  eNumericType(pMe
3310: 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  m);.  }.  return
3320: 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51   0;.}..#ifdef SQ
3330: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
3340: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
3350: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
3360: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
3370: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
3380: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
3390: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
33a0: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
33b0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
33c0: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
33d0: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
33e0: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
33f0: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
3400: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
3410: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
3420: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
3430: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
3440: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
3450: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
3460: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
3470: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
3480: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3490: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
34a0: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
34b0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
34c0: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
34d0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
34e0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
34f0: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
3500: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3510: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3520: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3530: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3540: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3550: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
3560: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
3570: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3580: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
3590: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
35a0: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
35b0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
35c0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
35d0: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
35e0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
35f0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3600: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3610: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3620: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
3630: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3640: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3650: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
3660: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
3670: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
3680: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3690: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
36a0: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
36b0: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
36c0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
36d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36e0: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
36f0: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3700: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3710: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
3720: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
3730: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
3740: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
3750: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
3760: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
3770: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
3780: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3790: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
37a0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
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 69 66 28 20 66 20 26 20  r);.    if( f & 
37e0: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
37f0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3800: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
3810: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
3820: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
3830: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3840: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
3850: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
3860: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
3870: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
3880: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
3890: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
38a0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
38b0: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
38c0: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
38d0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
38e0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
38f0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3900: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3910: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
3920: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
3930: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3940: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
3950: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3960: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3970: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
3980: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
3990: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
39a0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
39b0: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
39c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
39d0: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
39e0: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
39f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a00: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
3a10: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
3a20: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
3a30: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
3a40: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
3a50: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
3a60: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
3a70: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
3a80: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
3a90: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
3aa0: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
3ab0: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
3ac0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3ad0: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
3ae0: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3af0: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
3b00: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
3b10: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
3b20: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3b30: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
3b40: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
3b50: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
3b60: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
3b70: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
3b80: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
3b90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3ba0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
3bb0: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
3bc0: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
3bd0: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
3be0: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
3bf0: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
3c00: 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20  rint(Mem *p){.  
3c10: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c20: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a  EM_Undefined ){.
3c30: 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64      printf(" und
3c40: 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73  efined");.  }els
3c50: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3c60: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
3c70: 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29   printf(" NULL")
3c80: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
3c90: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3ca0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
3cb0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
3cc0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3cd0: 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69  si:%lld", p->u.i
3ce0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3cf0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
3d00: 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  t ){.    printf(
3d10: 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e  " i:%lld", p->u.
3d20: 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  i);.#ifndef SQLI
3d30: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3d40: 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69  _POINT.  }else i
3d50: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3d60: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72  M_Real ){.    pr
3d70: 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d  intf(" r:%g", p-
3d80: 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  >u.r);.#endif.  
3d90: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3da0: 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20  gs & MEM_RowSet 
3db0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3dc0: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
3dd0: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
3de0: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
3df0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3e00: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
3e10: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73  .    printf(" %s
3e20: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a  ", zBuf);.  }.}.
3e30: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69  static void regi
3e40: 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69 52  sterTrace(int iR
3e50: 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70  eg, Mem *p){.  p
3e60: 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d  rintf("REG[%d] =
3e70: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
3e80: 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20  TracePrint(p);. 
3e90: 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d   printf("\n");.}
3ea0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3eb0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3ec0: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3ed0: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62  TRACE(R,M) if(db
3ee0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56  ->flags&SQLITE_V
3ef0: 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74 65  dbeTrace)registe
3f00: 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73  rTrace(R,M).#els
3f10: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
3f20: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
3f30: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3f40: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3f50: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3f60: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3f70: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3f80: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3f90: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3fa0: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
3fb0: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3fc0: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3fd0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  if..#ifndef NDEB
3fe0: 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  UG./*.** This fu
3ff0: 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63  nction is only c
4000: 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
4010: 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78  n an assert() ex
4020: 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20  pression. It.** 
4030: 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20  checks that the 
4040: 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63  sqlite3.nTransac
4050: 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73  tion variable is
4060: 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74   correctly set t
4070: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
4080: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
4090: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75  on savepoints cu
40a0: 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a  rrently in the .
40b0: 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73  ** linked list s
40c0: 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74  tarting at sqlit
40d0: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a  e3.pSavepoint..*
40e0: 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a  * .** Usage:.**.
40f0: 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63  **     assert( c
4100: 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
4110: 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61  nt(db) );.*/.sta
4120: 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76  tic int checkSav
4130: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69  epointCount(sqli
4140: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  te3 *db){.  int 
4150: 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69  n = 0;.  Savepoi
4160: 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64  nt *p;.  for(p=d
4170: 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70  b->pSavepoint; p
4180: 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b  ; p=p->pNext) n+
4190: 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  +;.  assert( n==
41a0: 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20  (db->nSavepoint 
41b0: 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  + db->isTransact
41c0: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b  ionSavepoint) );
41d0: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23  .  return 1;.}.#
41e0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78  endif.../*.** Ex
41f0: 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66  ecute as much of
4200: 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20   a VDBE program 
4210: 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68  as we can..** Th
4220: 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f  is is the core o
4230: 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  f sqlite3_step()
4240: 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .  .*/.int sqlit
4250: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
4260: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
4270: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4280: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  VDBE */.){.  int
4290: 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20   pc=0;          
42a0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
42b0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a  rogram counter *
42c0: 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  /.  Op *aOp = p-
42d0: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
42e0: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
42f0: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20   */.  Op *pOp;  
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
4320: 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72  ation */.  int r
4330: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
4340: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
4350: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
4360: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
4370: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
4380: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
4390: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
43a0: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
43b0: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
43c0: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
43d0: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
43e0: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
43f0: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
4400: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
4410: 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d    int iCompare =
4420: 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
4430: 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f  Result of last O
4440: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
4450: 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ion */.  unsigne
4460: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
4470: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4480: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
4490: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
44a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
44b0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
44c0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
44d0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a  ressLimit = 0;/*
44e0: 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73   Invoke xProgres
44f0: 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70  s() when nVmStep
4500: 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f   reaches this */
4510: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61  .#endif.  Mem *a
4520: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
4530: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4540: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
4550: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
4560: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
4570: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
4580: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
45a0: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
45b0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
45c0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
45d0: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
45e0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
45f0: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
4600: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
4610: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e   operand */.  in
4620: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
4630: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
4640: 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  utation of colum
4650: 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72  ns for OP_Compar
4660: 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  e */.  i64 lastR
4670: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
4680: 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20  owid;  /* Saved 
4690: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73  value of the las
46a0: 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a  t insert ROWID *
46b0: 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  /.#ifdef VDBE_PR
46c0: 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72  OFILE.  u64 star
46d0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
46e0: 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20     /* CPU clock 
46f0: 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f  count at start o
4700: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
4710: 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54  if.  /*** INSERT
4720: 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52   STACK UNION HER
4730: 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74  E ***/..  assert
4740: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4750: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4760: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4770: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
4780: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  /.  sqlite3VdbeE
4790: 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70  nter(p);.  if( p
47a0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
47b0: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
47c0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
47d0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
47e0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
47f0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
4800: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
4810: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4820: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4830: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4840: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4850: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4860: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  p->rc==SQLITE_BU
4870: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4880: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4890: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
48a0: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
48b0: 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72  TE_OK;.  p->iCur
48c0: 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20  rentTime = 0;.  
48d0: 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61  assert( p->expla
48e0: 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52  in==0 );.  p->pR
48f0: 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20  esultSet = 0;.  
4900: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
4910: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28  nBusy = 0;.  if(
4920: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
4930: 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f  upted ) goto abo
4940: 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
4950: 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  upt;.  sqlite3Vd
4960: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4970: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4980: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4990: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
49a0: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
49b0: 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62    assert( 0 < db
49c0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29  ->nProgressOps )
49d0: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
49e0: 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65 64  imit = (unsigned
49f0: 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c  )p->aCounter[SQL
4a00: 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56  ITE_STMTSTATUS_V
4a10: 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66 28  M_STEP];.    if(
4a20: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d   nProgressLimit=
4a30: 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f  =0 ){.      nPro
4a40: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d  gressLimit = db-
4a50: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4a60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4a70: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 25  nProgressLimit %
4a80: 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e  = (unsigned)db->
4a90: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20  nProgressOps;.  
4aa0: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23    }.  }.#endif.#
4ab0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4ac0: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4ad0: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4ae0: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
4af0: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
4b00: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
4b10: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
4b20: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
4b30: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
4b40: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4b50: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
4b60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4b70: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4b80: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4b90: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
4ba0: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
4bb0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
4bc0: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
4bd0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
4be0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4bf0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4c00: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4c10: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
4c20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4c30: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4c40: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4c50: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
4c60: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4c70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4c80: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
4c90: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
4ca0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
4cb0: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
4cc0: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
4cd0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
4ce0: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
4cf0: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
4d00: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
4d10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
4d20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4d30: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4d40: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
4d50: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
4d60: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
4d70: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
4d80: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
4d90: 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63  f.  for(pc=p->pc
4da0: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  ; rc==SQLITE_OK;
4db0: 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65   pc++){.    asse
4dc0: 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c  rt( pc>=0 && pc<
4dd0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66  p->nOp );.    if
4de0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
4df0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
4e00: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
4e10: 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20  OFILE.    start 
4e20: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
4e30: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
4e40: 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70  mStep++;.    pOp
4e50: 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20   = &aOp[pc];..  
4e60: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
4e70: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
4e80: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
4e90: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
4ea0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4eb0: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
4ec0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
4ed0: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
4ee0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4ef0: 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70 29  stdout, pc, pOp)
4f00: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
4f10: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
4f20: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
4f30: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
4f40: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
4f50: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
4f60: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
4f70: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
4f80: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
4f90: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4fa0: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
4fb0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4fc0: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
4fd0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4fe0: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
4ff0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5000: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
5010: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5020: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
5030: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5040: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f  #endif..    /* O
5050: 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74  n any opcode wit
5060: 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72  h the "out2-prer
5070: 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72 65  elease" tag, fre
5080: 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74  e any.    ** ext
5090: 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e  ernal allocation
50a0: 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d  s out of mem[p2]
50b0: 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d   and set mem[p2]
50c0: 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e   to be.    ** an
50d0: 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67   undefined integ
50e0: 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c  er.  Opcodes wil
50f0: 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e  l either fill in
5100: 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20   the integer.   
5110: 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e   ** value or con
5120: 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20  vert mem[p2] to 
5130: 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  a different type
5140: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
5150: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67  ert( pOp->opflag
5160: 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  s==sqlite3Opcode
5170: 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70  Property[pOp->op
5180: 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28  code] );.    if(
5190: 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
51a0: 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
51b0: 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61  LEASE ){.      a
51c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
51d0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
51e0: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
51f0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
5200: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  );.      pOut = 
5210: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
5220: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5230: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
5240: 0a 20 20 20 20 20 20 69 66 28 20 56 64 62 65 4d  .      if( VdbeM
5250: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20  emDynamic(pOut) 
5260: 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
5270: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
5280: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
5290: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
52a0: 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  }..    /* Sanity
52b0: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
52c0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
52d0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
52e0: 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  UG.    if( (pOp-
52f0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5300: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
5310: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5320: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5330: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
5340: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
5350: 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  r) );.      asse
5360: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5370: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
5380: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5390: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
53a0: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
53b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
53c0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
53d0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
53e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
53f0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5400: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5410: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
5420: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5430: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5440: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5450: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5460: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5470: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5480: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5490: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
54a0: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
54b0: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
54c0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
54d0: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
54e0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
54f0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
5500: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5510: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5520: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5530: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5540: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5550: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5560: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
5570: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5580: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5590: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
55a0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  p3]) );.      as
55b0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
55c0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
55d0: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
55e0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  3]) );.      REG
55f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5600: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5610: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p3]);.    }.    
5620: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5630: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  s & OPFLG_OUT2)!
5640: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5650: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5660: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5670: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
5680: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5690: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
56a0: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
56b0: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
56c0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
56d0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
56e0: 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT3)!=0 ){.     
56f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5700: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5710: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5720: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5730: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
5740: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5750: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5760: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
5770: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5780: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5790: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
57e0: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
57f0: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5800: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5810: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5820: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5830: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5840: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5850: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5860: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5870: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5880: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5890: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
58a0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
58b0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
58c0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
58d0: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
58e0: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
58f0: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5900: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5910: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5920: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5930: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5940: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5950: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5960: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5970: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5980: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5990: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
59a0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
59b0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
59c0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
59d0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
59e0: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
59f0: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5a00: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5a10: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5a20: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5a30: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5a40: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5a50: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5a60: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5a70: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5a80: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5a90: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5aa0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5ab0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5ac0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5ad0: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5ae0: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5af0: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5b00: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5b10: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5b20: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5b30: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5b40: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5b50: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5b60: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5b70: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5b80: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5b90: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5ba0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5bb0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5bc0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5bd0: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5be0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5bf0: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5c00: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5c10: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5c20: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5c30: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5c40: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5c50: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5c60: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5c70: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5c80: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5c90: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5ca0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5cb0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5cc0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5cd0: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
5ce0: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5cf0: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5d00: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5d10: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5d20: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5d30: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5d40: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5d50: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5d60: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5d70: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5d80: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5d90: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5da0: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5db0: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5dc0: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5dd0: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5de0: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5df0: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5e00: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5e10: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5e20: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5e30: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5e40: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5e50: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5e60: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
5e70: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
5e80: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
5e90: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
5ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
5ef0: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
5f00: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
5f10: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
5f20: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
5f30: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
5f40: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
5f50: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
5f60: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
5f70: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
5f80: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
5f90: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  the program..**.
5fa0: 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65  ** The P1 parame
5fb0: 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ter is not actua
5fc0: 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73  lly used by this
5fd0: 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65   opcode.  Howeve
5fe0: 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65  r, it.** is some
5ff0: 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69  times set to 1 i
6000: 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61  nstead of 0 as a
6010: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
6020: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a  mand-line shell.
6030: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74  ** that this Got
6040: 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  o is the bottom 
6050: 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68  of a loop and th
6060: 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f  at the lines fro
6070: 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20  m P2 down.** to 
6080: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65  the current line
6090: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
60a0: 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ted for EXPLAIN 
60b0: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
60c0: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
60d0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
60e0: 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  /.  pc = pOp->p2
60f0: 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f   - 1;..  /* Opco
6100: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
6110: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
6120: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
6130: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6140: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52  * OP_VNext, OP_R
6150: 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50  owSetNext, or OP
6160: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
6170: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
6180: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
6190: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
61a0: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
61b0: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
61c0: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
61d0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
61e0: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
61f0: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
6200: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
6210: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
6220: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
6230: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
6240: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
6250: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
6260: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
6270: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
6280: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
6290: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
62a0: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
62b0: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
62c0: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
62d0: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
62e0: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
62f0: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
6300: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
6310: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
6320: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
6330: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
6340: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
6350: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
6360: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
6370: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69  r_interrupt:.  i
6380: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
6390: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
63a0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
63b0: 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53  rrupt;.#ifndef S
63c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
63d0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
63e0: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
63f0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
6400: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
6410: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
6420: 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66  d number.  ** of
6430: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
6440: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
6450: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
6460: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
6470: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ** sqlite3VdbeEx
6480: 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61  ec() or since la
6490: 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67  st time the prog
64a0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61  ress callback wa
64b0: 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20  s called)..  ** 
64c0: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
64d0: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
64e0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
64f0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
6500: 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ine with.  ** a 
6510: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
6520: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20  TE_ABORT..  */. 
6530: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
6540: 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70  ss!=0 && nVmStep
6550: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
6560: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
6570: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
6580: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
6590: 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53  ressLimit = nVmS
65a0: 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72  tep + db->nProgr
65b0: 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65  essOps - (nVmSte
65c0: 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  p%db->nProgressO
65d0: 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ps);.    if( db-
65e0: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
65f0: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
6600: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
6610: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
6620: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
6630: 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20  or_halt;.    }. 
6640: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
6650: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6660: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
6670: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
6680: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
6690: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
66a0: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
66b0: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
66c0: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
66d0: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
66e0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
66f0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6700: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
6710: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
6720: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31  ursor) );.  pIn1
6730: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6740: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
6750: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
6760: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
6770: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
6780: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
6790: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
67a0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
67b0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
67c0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
67d0: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
67e0: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
67f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
6800: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
6810: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
6820: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6830: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
6840: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6850: 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68  P1.  After.** th
6860: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6870: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6880: 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  fined..*/.case O
6890: 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20  P_Return: {     
68a0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
68b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
68c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
68d0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d  t( pIn1->flags==
68e0: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
68f0: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6900: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6910: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
6920: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6930: 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f  Opcode: InitCoro
6940: 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a  utine P1 P2 P3 *
6950: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20   *.**.** Set up 
6960: 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74  register P1 so t
6970: 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c  hat it will Yiel
6980: 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69  d to the corouti
6990: 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74  ne.** located at
69a0: 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a   address P3..**.
69b0: 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e  ** If P2!=0 then
69c0: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
69d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d  mplementation im
69e0: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
69f0: 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  s.** this opcode
6a00: 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20  .  So jump over 
6a10: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d  the coroutine im
6a20: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a  plementation to.
6a30: 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  ** address P2..*
6a40: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45  *.** See also: E
6a50: 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  ndCoroutine.*/.c
6a60: 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75  ase OP_InitCorou
6a70: 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a  tine: {     /* j
6a80: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
6a90: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70   pOp->p1>0 &&  p
6aa0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
6ab0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
6ac0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6ad0: 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  2>=0 && pOp->p2<
6ae0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65  p->nOp );.  asse
6af0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
6b00: 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70  & pOp->p3<p->nOp
6b10: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
6b20: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6b30: 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44  ssert( !VdbeMemD
6b40: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a  ynamic(pOut) );.
6b50: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
6b60: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75  p->p3 - 1;.  pOu
6b70: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
6b80: 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  nt;.  if( pOp->p
6b90: 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  2 ) pc = pOp->p2
6ba0: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
6bb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
6bc0: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
6bd0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
6be0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
6bf0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
6c00: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59  gister P1 is a Y
6c10: 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ield..** Jump to
6c20: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
6c30: 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e  r of that Yield.
6c40: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
6c50: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
6c60: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
6c70: 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
6c80: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
6c90: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
6ca0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
6cb0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
6cc0: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
6cd0: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
6ce0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6cf0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
6d00: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
6d10: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
6d20: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
6d30: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
6d40: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
6d50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
6d60: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
6d70: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
6d80: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
6d90: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
6da0: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
6db0: 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65 72  ;.  pc = pCaller
6dc0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e 31  ->p2 - 1;.  pIn1
6dd0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
6de0: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
6df0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6e00: 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a   Yield P1 P2 * *
6e10: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
6e20: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6e30: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
6e40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6e50: 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68    This.** has th
6e60: 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c  e effect of yiel
6e70: 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74  ding to a corout
6e80: 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ine..**.** If th
6e90: 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74  e coroutine that
6ea0: 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20   is launched by 
6eb0: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
6ec0: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69   ends with.** Yi
6ed0: 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68  eld or Return th
6ee0: 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74  en continue to t
6ef0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6f00: 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20  ion.  But if.** 
6f10: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61  the coroutine la
6f20: 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69  unched by this i
6f30: 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20  nstruction ends 
6f40: 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75  with.** EndCorou
6f50: 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20  tine, then jump 
6f60: 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61  to P2 rather tha
6f70: 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74  n continuing wit
6f80: 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e  h the.** next in
6f90: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
6fa0: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
6fb0: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6fc0: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
6fd0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
6fe0: 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63  jump */.  int pc
6ff0: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
7000: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7010: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
7020: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
7030: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
7040: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
7050: 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e  cDest = (int)pIn
7060: 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e  1->u.i;.  pIn1->
7070: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
7080: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
7090: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
70a0: 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61  = pcDest;.  brea
70b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
70c0: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
70d0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
70e0: 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b  Synopsis:  if r[
70f0: 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a  P3]=null halt.**
7100: 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
7110: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
7120: 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55  P3.  If it is NU
7130: 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69  LL then Halt usi
7140: 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  ng.** parameter 
7150: 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61  P1, P2, and P4 a
7160: 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61  s if this were a
7170: 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f   Halt instructio
7180: 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61  n.  If the.** va
7190: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
71a0: 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P3 is not NULL, 
71b0: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
71c0: 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a  e is a no-op..**
71d0: 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
71e0: 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a  r should be 1..*
71f0: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
7200: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
7210: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
7220: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
7230: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
7240: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
7250: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
7260: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
7270: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
7280: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
7290: 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
72a0: 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69  *.** Exit immedi
72b0: 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e  ately.  All open
72c0: 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72   cursors, etc ar
72d0: 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f  e closed.** auto
72e0: 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  matically..**.**
72f0: 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c   P1 is the resul
7300: 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  t code returned 
7310: 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  by sqlite3_exec(
7320: 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ), sqlite3_reset
7330: 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65  (),.** or sqlite
7340: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46  3_finalize().  F
7350: 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74  or a normal halt
7360: 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65  , this should be
7370: 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a   SQLITE_OK (0)..
7380: 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69  ** For errors, i
7390: 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74  t can be some ot
73a0: 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50  her value.  If P
73b0: 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c  1!=0 then P2 wil
73c0: 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  l determine.** w
73d0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f  hether or not to
73e0: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75   rollback the cu
73f0: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
7400: 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62  n.  Do not rollb
7410: 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45  ack.** if P2==OE
7420: 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f  _Fail. Do the ro
7430: 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45  llback if P2==OE
7440: 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50  _Rollback.  If P
7450: 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20  2==OE_Abort,.** 
7460: 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c  then back out al
7470: 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  l changes that h
7480: 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72  ave occurred dur
7490: 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69  ing this executi
74a0: 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  on of the.** VDB
74b0: 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f  E, but do not ro
74c0: 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
74d0: 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49  action. .**.** I
74e0: 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  f P4 is not null
74f0: 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65   then it is an e
7500: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
7510: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ing..**.** P5 is
7520: 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e   a value between
7530: 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73   0 and 4, inclus
7540: 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69  ive, that modifi
7550: 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  es the P4 string
7560: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28  ..**.**    0:  (
7570: 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20  no change).**   
7580: 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   1:  NOT NULL co
7590: 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  ntraint failed: 
75a0: 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49  P4.**    2:  UNI
75b0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  QUE constraint f
75c0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
75d0: 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  3:  CHECK constr
75e0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
75f0: 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47  **    4:  FOREIG
7600: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
7610: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a   failed: P4.**.*
7620: 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
7630: 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55  ero and P4 is NU
7640: 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68  LL, then everyth
7650: 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22 3a  ing after the ":
7660: 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e  " is.** omitted.
7670: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
7680: 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74  an implied "Halt
7690: 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74   0 0 0" instruct
76a0: 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20  ion inserted at 
76b0: 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a  the very end of.
76c0: 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d  ** every program
76d0: 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73  .  So a jump pas
76e0: 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72  t the last instr
76f0: 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  uction of the pr
7700: 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20  ogram.** is the 
7710: 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e  same as executin
7720: 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  g Halt..*/.case 
7730: 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63 6f 6e  OP_Halt: {.  con
7740: 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 0a  st char *zType;.
7750: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c    const char *zL
7760: 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20 70 4f  ogFmt;..  if( pO
7770: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
7780: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
7790: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
77a0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
77b0: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
77c0: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
77d0: 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61  . */.    VdbeFra
77e0: 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e  me *pFrame = p->
77f0: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
7800: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
7810: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
7820: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
7830: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
7840: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
7850: 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71  ge);.    pc = sq
7860: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
7870: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
7880: 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64     lastRowid = d
7890: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
78a0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
78b0: 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
78c0: 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e    /* Instruction
78d0: 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72   pc is the OP_Pr
78e0: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
78f0: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
7900: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
7910: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
7920: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
7930: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7940: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
7950: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
7960: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
7970: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
7980: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
7990: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
79a0: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
79b0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
79c0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
79d0: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
79e0: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
79f0: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
7a00: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
7a10: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61  .      pc = p->a
7a20: 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20  Op[pc].p2-1;.   
7a30: 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e   }.    aOp = p->
7a40: 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20  aOp;.    aMem = 
7a50: 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65  p->aMem;.    bre
7a60: 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20  ak;.  }.  p->rc 
7a70: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
7a80: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
7a90: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
7aa0: 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70  pc = pc;.  if( p
7ab0: 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ->rc ){.    if( 
7ac0: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
7ad0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
7ae0: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70  ar * const azTyp
7af0: 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c  e[] = { "NOT NUL
7b00: 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43  L", "UNIQUE", "C
7b10: 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20  HECK",.         
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59      "FOREIGN KEY
7b50: 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65 72  " };.      asser
7b60: 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26  t( pOp->p5>=1 &&
7b70: 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20   pOp->p5<=4 );. 
7b80: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7b90: 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
7ba0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7bb0: 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20  ->p5==2 );.     
7bc0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7bd0: 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74  p5==3 );.      t
7be0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7bf0: 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54 79  ==4 );.      zTy
7c00: 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d  pe = azType[pOp-
7c10: 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73  >p5-1];.    }els
7c20: 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d  e{.      zType =
7c30: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73   0;.    }.    as
7c40: 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20 7c  sert( zType!=0 |
7c50: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  | pOp->p4.z!=0 )
7c60: 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20  ;.    zLogFmt = 
7c70: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
7c80: 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69  [%s]: %s";.    i
7c90: 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70 2d  f( zType && pOp-
7ca0: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73  >p4.z ){.      s
7cb0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
7cc0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
7cd0: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7ce0: 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a 20 20  failed: %s", .  
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f 70 2d       zType, pOp-
7d10: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73  >p4.z);.    }els
7d20: 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20  e if( pOp->p4.z 
7d30: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
7d40: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
7d50: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
7d60: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
7d70: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
7d80: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
7d90: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
7da0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
7db0: 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a  ailed", zType);.
7dc0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
7dd0: 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a  3_log(pOp->p1, z
7de0: 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d 3e 7a  LogFmt, pc, p->z
7df0: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
7e00: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
7e10: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
7e20: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
7e30: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
7e40: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
7e50: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
7e60: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7e70: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7e80: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
7e90: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
7ea0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
7eb0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7ec0: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
7ed0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
7ee0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
7ef0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f00: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
7f10: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
7f20: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
7f30: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
7f40: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
7f50: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
7f60: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
7f70: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
7f80: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
7f90: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
7fa0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
7fb0: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
7fc0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
7fd0: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
7fe0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7ff0: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
8000: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
8010: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8020: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
8030: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8040: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8050: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8060: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8070: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8080: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8090: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
80a0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
80b0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
80c0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
80d0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
80e0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
80f0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
8100: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
8110: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
8120: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
8130: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
8140: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
8150: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
8160: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
8170: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
8180: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8190: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
81a0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
81b0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
81c0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
81d0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
81e0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
81f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8200: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
8210: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8220: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
8230: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8240: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8250: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73   MEM_Real;.  ass
8260: 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e  ert( !sqlite3IsN
8270: 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61  aN(*pOp->p4.pRea
8280: 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  l) );.  pOut->u.
8290: 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  r = *pOp->p4.pRe
82a0: 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  al;.  break;.}.#
82b0: 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
82c0: 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a  : String8 * P2 *
82d0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
82e0: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a  s: r[P2]='P4'.**
82f0: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
8300: 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65   a nul terminate
8310: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20  d UTF-8 string. 
8320: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74  This opcode is t
8330: 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69  ransformed .** i
8340: 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 62 65 66  nto a String bef
8350: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
8360: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
8370: 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a   time.  During.*
8380: 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d  * this transform
8390: 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74  ation, the lengt
83a0: 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69  h of string P4 i
83b0: 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73  s computed and s
83c0: 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20  tored.** as the 
83d0: 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f  P1 parameter..*/
83e0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
83f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
8400: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
8410: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
8420: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
8430: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
8440: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
8450: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
8460: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
8470: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
8480: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
8490: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
84a0: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
84b0: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
84c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
84d0: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
84e0: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
84f0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8500: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8510: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54  if( rc==SQLITE_T
8520: 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f  OOBIG ) goto too
8530: 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51  _big;.    if( SQ
8540: 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33  LITE_OK!=sqlite3
8550: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
8560: 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
8570: 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  g) ) goto no_mem
8580: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
8590: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26  ut->szMalloc>0 &
85a0: 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d  & pOut->zMalloc=
85b0: 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20  =pOut->z );.    
85c0: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
85d0: 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20  ynamic(pOut)==0 
85e0: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d  );.    pOut->szM
85f0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
8600: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
8610: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66  M_Static;.    if
8620: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
8630: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
8640: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
8650: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
8660: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
8670: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
8680: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
8690: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
86a0: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
86b0: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
86c0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
86d0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
86e0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
86f0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8700: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
8710: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
8720: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
8730: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
8740: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
8750: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
8760: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
8770: 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  P4' (len=P1).**.
8780: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
8790: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
87a0: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
87b0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
87c0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
87d0: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
87e0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
87f0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
8800: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
8810: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
8820: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
8830: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8840: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
8850: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
8860: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
8870: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
8880: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8890: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
88a0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
88b0: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
88c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
88d0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50  nopsis:  r[P2..P
88e0: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
88f0: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
8900: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
8910: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
8920: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
8930: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
8940: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
8950: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
8960: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
8970: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
8980: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
8990: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
89a0: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
89b0: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
89c0: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
89d0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
89e0: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
89f0: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8a00: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8a10: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8a20: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
8a30: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
8a40: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
8a50: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
8a60: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
8a70: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
8a80: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
8a90: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
8aa0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
8ab0: 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c  t cnt;.  u16 nul
8ac0: 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20 70  lFlag;.  cnt = p
8ad0: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
8ae0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8af0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
8b00: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
8b10: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
8b20: 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20  lag = pOp->p1 ? 
8b30: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c  (MEM_Null|MEM_Cl
8b40: 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c  eared) : MEM_Nul
8b50: 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e  l;.  while( cnt>
8b60: 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  0 ){.    pOut++;
8b70: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
8b80: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
8b90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8ba0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
8bb0: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
8bc0: 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20   = nullFlag;.   
8bd0: 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72   cnt--;.  }.  br
8be0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8bf0: 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a  e: SoftNull P1 *
8c00: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
8c10: 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a  is:  r[P1]=NULL.
8c20: 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74  **.** Set regist
8c30: 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68  er P1 to have th
8c40: 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20  e value NULL as 
8c50: 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d  seen by the OP_M
8c60: 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73  akeRecord.** ins
8c70: 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f  truction, but do
8c80: 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74   not free any st
8c90: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d  ring or blob mem
8ca0: 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ory associated w
8cb0: 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73  ith.** the regis
8cc0: 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20  ter, so that if 
8cd0: 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20  the value was a 
8ce0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
8cf0: 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  hat was.** previ
8d00: 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69  ously copied usi
8d10: 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65  ng OP_SCopy, the
8d20: 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e   copies will con
8d30: 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69  tinue to be vali
8d40: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  d..*/.case OP_So
8d50: 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65  ftNull: {.  asse
8d60: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
8d70: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
8d80: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
8d90: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
8da0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
8db0: 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74  t->flags = (pOut
8dc0: 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c  ->flags|MEM_Null
8dd0: 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  )&~MEM_Undefined
8de0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8df0: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
8e00: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8e10: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8e20: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
8e30: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
8e40: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
8e50: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
8e60: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
8e70: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
8e80: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
8e90: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
8ea0: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
8eb0: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
8ec0: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
8ed0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
8ee0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
8ef0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
8f00: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
8f10: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
8f20: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
8f30: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
8f40: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
8f50: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8f60: 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31  ode: Variable P1
8f70: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8f80: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61  nopsis: r[P2]=pa
8f90: 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a  rameter(P1,P4).*
8fa0: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
8fb0: 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e  e values of boun
8fc0: 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69  d parameter P1 i
8fd0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a  nto register P2.
8fe0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72  **.** If the par
8ff0: 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c  ameter is named,
9000: 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61   then its name a
9010: 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  ppears in P4..**
9020: 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
9030: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
9040: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
9050: 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  name()..*/.case 
9060: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20  OP_Variable: {  
9070: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9080: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
9090: 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20    Mem *pVar;    
90a0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e     /* Value bein
90b0: 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f  g transferred */
90c0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
90d0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
90e0: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61  <=p->nVar );.  a
90f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
9100: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a  ==0 || pOp->p4.z
9110: 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e  ==p->azVar[pOp->
9120: 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20  p1-1] );.  pVar 
9130: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
9140: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
9150: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
9160: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
9170: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9180: 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
9190: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
91a0: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
91b0: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
91c0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
91d0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
91e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
91f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9200: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
9210: 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a  @P3]=r[P1@P3].**
9220: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20  .** Move the P3 
9230: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
9240: 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f  er P1..P1+P3-1 o
9250: 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ver into.** regi
9260: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d  sters P2..P2+P3-
9270: 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31  1.  Registers P1
9280: 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a  ..P1+P3-1 are.**
9290: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
92a0: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
92b0: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
92c0: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
92d0: 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e  .P1+P3-1 and P2.
92e0: 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72  .P2+P3-1 to over
92f0: 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65  lap.  It is an e
9300: 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74  rror.** for P3 t
9310: 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31  o be less than 1
9320: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
9330: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20  e: {.  int n;   
9340: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9350: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
9360: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
9370: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
9380: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9390: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
93a0: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
93b0: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
93c0: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
93d0: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
93e0: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
93f0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
9400: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
9410: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
9420: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
9430: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
9440: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31   pIn1 = &aMem[p1
9450: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9460: 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  m[p2];.  do{.   
9470: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
9480: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
9490: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
94a0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
94b0: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
94c0: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
94d0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
94e0: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
94f0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
9500: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9510: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9520: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
9530: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9540: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
9550: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
9560: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
9570: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61  t->pScopyFrom<&a
9580: 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20  Mem[p1+pOp->p3] 
9590: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
95a0: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20  ScopyFrom += p1 
95b0: 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d  - pOp->p2;.    }
95c0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49  .#endif.    REGI
95d0: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
95e0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
95f0: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9600: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9610: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9620: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
9630: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9640: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
9650: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
9660: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
9670: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
9680: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9690: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
96a0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
96b0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
96c0: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
96d0: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
96e0: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
96f0: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9700: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9710: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9720: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
9730: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
9740: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9750: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9760: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9770: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9780: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9790: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
97a0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
97b0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
97c0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
97d0: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
97e0: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
97f0: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9800: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9810: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9820: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
9830: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9840: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
9850: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
9860: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
9870: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
9880: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9890: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
98a0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
98b0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
98c0: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
98d0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
98e0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
98f0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
9900: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
9910: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
9920: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
9930: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
9940: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
9950: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
9960: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
9970: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
9980: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
9990: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
99a0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
99b0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
99c0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
99d0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
99e0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
99f0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
9a00: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
9a10: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
9a20: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
9a30: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
9a40: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
9a50: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
9a60: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
9a70: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
9a80: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
9a90: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
9aa0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
9ab0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
9ac0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
9ad0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
9ae0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9af0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9b00: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
9b10: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
9b20: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9b30: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9b40: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
9b50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9b60: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
9b70: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
9b80: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9b90: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
9ba0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9bb0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
9bc0: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
9bd0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70   Synopsis:  outp
9be0: 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a  ut=r[P1@P2].**.*
9bf0: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
9c00: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
9c10: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
9c20: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
9c30: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
9c40: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
9c50: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
9c60: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
9c70: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
9c80: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
9c90: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
9ca0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
9cb0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
9cc0: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
9cd0: 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28  to the r(P1)..r(
9ce0: 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20  P1+P2-1) values 
9cf0: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
9d00: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
9d10: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
9d20: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
9d30: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
9d40: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
9d50: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
9d60: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
9d70: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
9d80: 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d  +pOp->p2<=(p->nM
9d90: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
9da0: 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   );..#ifndef SQL
9db0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
9dc0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20  S_CALLBACK.  /* 
9dd0: 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73  Run the progress
9de0: 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65   counter just be
9df0: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a  fore returning..
9e00: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
9e10: 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26  Progress!=0.   &
9e20: 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67  & nVmStep>=nProg
9e30: 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20  ressLimit.   && 
9e40: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
9e50: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21  ->pProgressArg)!
9e60: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d  =0.  ){.    rc =
9e70: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
9e80: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65  T;.    goto vdbe
9e90: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d  _error_halt;.  }
9ea0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
9eb0: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
9ec0: 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d  has violated imm
9ed0: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
9ee0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
9ef0: 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75  do.  ** not retu
9f00: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
9f10: 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20   rows modified. 
9f20: 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41  And do not RELEA
9f30: 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  SE the statement
9f40: 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
9f50: 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62  n. It needs to b
9f60: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
9f70: 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  */.  if( SQLITE_
9f80: 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  OK!=(rc = sqlite
9f90: 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
9fa0: 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  0)) ){.    asser
9fb0: 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  t( db->flags&SQL
9fc0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
9fd0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
9fe0: 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
9ff0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
a000: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
a010: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a020: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
a030: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
a040: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
a050: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
a060: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
a070: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
a080: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
a090: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
a0a0: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a0b0: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
a0c0: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
a0d0: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
a0e0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a0f0: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
a100: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
a110: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
a120: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
a130: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
a140: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a150: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
a160: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
a170: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
a180: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
a190: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
a1a0: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
a1b0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a1c0: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
a1d0: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
a1e0: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
a1f0: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
a200: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
a210: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
a220: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
a230: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
a240: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
a250: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
a260: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a270: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
a280: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
a290: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
a2a0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
a2b0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
a2c0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a2d0: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
a2e0: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
a2f0: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
a300: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
a310: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
a320: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
a330: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
a340: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
a350: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
a360: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
a370: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
a380: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
a390: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
a3a0: 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
a3b0: 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20  SQLITE_OK) ){.  
a3c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
a3d0: 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
a3e0: 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  l ephemeral curs
a3f0: 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f  or row caches */
a400: 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d  .  p->cacheCtr =
a410: 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20   (p->cacheCtr + 
a420: 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  2)|1;..  /* Make
a430: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
a440: 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
a450: 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65   row are \000 te
a460: 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e  rminated.  ** an
a470: 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e  d have an assign
a480: 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65  ed type.  The re
a490: 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68  sults are de-eph
a4a0: 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20  emeralized as.  
a4b0: 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74  ** a side effect
a4c0: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
a4d0: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
a4e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a4f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70    for(i=0; i<pOp
a500: 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ->p2; i++){.    
a510: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
a520: 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a  id(&pMem[i]) );.
a530: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
a540: 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  ze(&pMem[i]);.  
a550: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b    assert( (pMem[
a560: 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45  i].flags & MEM_E
a570: 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20  phem)==0.       
a580: 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d       || (pMem[i]
a590: 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  .flags & (MEM_St
a5a0: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
a5b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
a5c0: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
a5d0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
a5e0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
a5f0: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
a600: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
a610: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
a620: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
a630: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
a640: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
a650: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
a660: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
a670: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
a680: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
a690: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
a6a0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
a6b0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
a6c0: 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P1].**.** Add
a6d0: 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67   the text in reg
a6e0: 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68  ister P1 onto th
a6f0: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78  e end of the tex
a700: 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  t in.** register
a710: 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P2 and store th
a720: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a730: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
a740: 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20  ither the P1 or 
a750: 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c  P2 text are NULL
a760: 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c   then store NULL
a770: 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20   in P3..**.**   
a780: 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a  P3 = P2 || P1.**
a790: 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
a7a0: 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20  l for P1 and P3 
a7b0: 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72  to be the same r
a7c0: 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d  egister. Sometim
a7d0: 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20  es,.** if P3 is 
a7e0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a7f0: 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70  r as P2, the imp
a800: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61  lementation is a
a810: 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  ble.** to avoid 
a820: 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63  a memcpy()..*/.c
a830: 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b  ase OP_Concat: {
a840: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
a850: 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c  me as TK_CONCAT,
a860: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
a870: 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a  */.  i64 nByte;.
a880: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a890: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
a8a0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a8b0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
a8c0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
a8d0: 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74  sert( pIn1!=pOut
a8e0: 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
a8f0: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
a900: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
a910: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
a920: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
a930: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
a940: 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64    }.  if( Expand
a950: 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78  Blob(pIn1) || Ex
a960: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29  pandBlob(pIn2) )
a970: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
a980: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
a990: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72  encoding);.  Str
a9a0: 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63  ingify(pIn2, enc
a9b0: 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20  oding);.  nByte 
a9c0: 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32  = pIn1->n + pIn2
a9d0: 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ->n;.  if( nByte
a9e0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
a9f0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
aa00: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
aa10: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _big;.  }.  if( 
aa20: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
aa30: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
aa40: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
aa50: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
aa60: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_mem;.  }.  Mem
aa70: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
aa80: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
aa90: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
aaa0: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
aab0: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
aac0: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
aad0: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
aae0: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
aaf0: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
ab00: 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20  ->z[nByte]=0;.  
ab10: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d  pOut->z[nByte+1]
ab20: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   = 0;.  pOut->fl
ab30: 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
ab40: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
ab50: 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
ab60: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
ab70: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
ab80: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
ab90: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
aba0: 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50  ode: Add P1 P2 P
abb0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
abc0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b  s:  r[P3]=r[P1]+
abd0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P2].**.** Add 
abe0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
abf0: 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
ac00: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ac10: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
ac20: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
ac30: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
ac40: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
ac50: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
ac60: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
ac70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69  /* Opcode: Multi
ac80: 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ply P1 P2 P3 * *
ac90: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
aca0: 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d  [P3]=r[P1]*r[P2]
acb0: 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70  .**.**.** Multip
acc0: 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ly the value in 
acd0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
ace0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
acf0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
ad00: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
ad10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
ad20: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
ad30: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
ad40: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
ad50: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75  */./* Opcode: Su
ad60: 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20  btract P1 P2 P3 
ad70: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
ad80: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b    r[P3]=r[P2]-r[
ad90: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61  P1].**.** Subtra
ada0: 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ct the value in 
adb0: 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d  register P1 from
adc0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
add0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
ade0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
adf0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
ae00: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
ae10: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
ae20: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ae30: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ae40: 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20  Divide P1 P2 P3 
ae50: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
ae60: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b    r[P3]=r[P2]/r[
ae70: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
ae80: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ae90: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
aea0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aeb0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
aec0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
aed0: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
aee0: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
aef0: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
af00: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
af10: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
af20: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
af30: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
af40: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
af50: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
af60: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
af70: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
af80: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
af90: 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d  [P3]=r[P2]%r[P1]
afa0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74  .**.** Compute t
afb0: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74  he remainder aft
afc0: 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73  er integer regis
afd0: 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65  ter P2 is divide
afe0: 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65  d by .** registe
aff0: 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74  r P1 and store t
b000: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b010: 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66  ister P3. .** If
b020: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b030: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
b040: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
b050: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
b060: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
b070: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b080: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
b090: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
b0a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b0b0: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
b0c0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b0d0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
b0e0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b0f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
b100: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
b110: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
b120: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
b130: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b140: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
b150: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b160: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
b170: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b180: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
b190: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b1a0: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
b1b0: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
b1c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
b1d0: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
b1e0: 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74  3 */.  char bInt
b1f0: 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65  int;   /* Starte
b200: 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74  d out as two int
b210: 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  eger operands */
b220: 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
b230: 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d     /* Combined M
b240: 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20  EM_* flags from 
b250: 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20  both inputs */. 
b260: 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20   u16 type1;     
b270: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
b280: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b290: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b   */.  u16 type2;
b2a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
b2b0: 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f   type of right o
b2c0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b2d0: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
b2e0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b2f0: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
b300: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
b310: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
b320: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
b330: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
b340: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
b350: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b360: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
b370: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
b380: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
b390: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
b3a0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
b3b0: 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20  p->p1];.  type1 
b3c0: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b3d0: 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
b3e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
b3f0: 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54  type2 = numericT
b400: 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ype(pIn2);.  pOu
b410: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
b420: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
b430: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
b440: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
b450: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
b460: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
b470: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b480: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79  _null;.  if( (ty
b490: 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45  pe1 & type2 & ME
b4a0: 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
b4b0: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
b4c0: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
b4d0: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
b4e0: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
b4f0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
b500: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
b510: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
b520: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
b530: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
b540: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
b550: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
b560: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
b570: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
b580: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
b590: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
b5a0: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
b5b0: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
b5c0: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
b5d0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b5e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b5f0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
b600: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b610: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b620: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b630: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b640: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
b650: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
b660: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
b670: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
b680: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b690: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
b6a0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
b6b0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
b6c0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b6d0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
b6e0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
b6f0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
b700: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
b710: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
b720: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
b730: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
b740: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b750: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
b760: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
b770: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
b780: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
b790: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
b7a0: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
b7b0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
b7c0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
b7d0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
b7e0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
b7f0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b800: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
b810: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b820: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b830: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
b840: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b850: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b860: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
b870: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b880: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
b890: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
b8a0: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
b8b0: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
b8c0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
b8d0: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
b8e0: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
b8f0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b900: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b910: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
b920: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
b930: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
b940: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
b950: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
b960: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
b970: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
b980: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
b990: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b9a0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
b9b0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
b9c0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
b9d0: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
b9e0: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
b9f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
ba00: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
ba10: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
ba20: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
ba30: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
ba40: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
ba50: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
ba60: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
ba70: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
ba80: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
ba90: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
baa0: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
bab0: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a  pOut->u.r = rB;.
bac0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bad0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
bae0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79  l);.    if( ((ty
baf0: 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52  pe1|type2)&MEM_R
bb00: 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74  eal)==0 && !bInt
bb10: 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
bb20: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
bb30: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
bb40: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
bb50: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
bb60: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bb70: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
bb80: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
bb90: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
bba0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
bbb0: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
bbc0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
bbd0: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
bbe0: 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e  struct. If the n
bbf0: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
bc00: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
bc10: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
bc20: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
bc30: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
bc40: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
bc50: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
bc60: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
bc70: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
bc80: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
bc90: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
bca0: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
bcb0: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
bcc0: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
bcd0: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
bce0: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
bcf0: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
bd00: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
bd10: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
bd20: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
bd30: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
bd40: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
bd50: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
bd60: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
bd70: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
bd80: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
bd90: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
bda0: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
bdb0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
bdc0: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
bdd0: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
bde0: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
bdf0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
be00: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
be10: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
be20: 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c  ** publicly, onl
be30: 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  y to user functi
be40: 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66  ons defined in f
be50: 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f  unc.c..*/.case O
be60: 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61  P_CollSeq: {.  a
be70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
be80: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
be90: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  ;.  if( pOp->p1 
bea0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
beb0: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
bec0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29  Mem[pOp->p1], 0)
bed0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
bee0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  ../* Opcode: Fun
bef0: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
bf00: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
bf10: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
bf20: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
bf30: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
bf40: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
bf50: 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69  nter to a Functi
bf60: 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68 61  on structure tha
bf70: 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65  t.** defines the
bf80: 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20   function) with 
bf90: 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b  P5 arguments tak
bfa0: 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
bfb0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65   P2 and.** succe
bfc0: 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75  ssors.  The resu
bfd0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
bfe0: 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
bff0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c000: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
c010: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
c020: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
c030: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
c040: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
c050: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
c060: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
c070: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
c080: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
c090: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
c0a0: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
c0b0: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
c0c0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
c0d0: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
c0e0: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
c0f0: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
c100: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
c110: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
c120: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
c130: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
c140: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
c150: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
c160: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
c170: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
c180: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
c190: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
c1a0: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
c1b0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
c1c0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67  .** See also: Ag
c1d0: 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e  gStep and AggFin
c1e0: 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75  al.*/.case OP_Fu
c1f0: 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20  nction: {.  int 
c200: 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a  i;.  Mem *pArg;.
c210: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
c220: 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
c230: 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
c240: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
c250: 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c  pOp->p5;.  apVal
c260: 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
c270: 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
c280: 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  n==0 );.  assert
c290: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
c2a0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
c2b0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
c2c0: 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26 61 4d    ctx.pOut = &aM
c2d0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
c2e0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
c2f0: 70 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a 0a 20  p, ctx.pOut);.. 
c300: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
c310: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
c320: 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
c330: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
c340: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
c350: 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
c360: 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
c370: 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d  p2+n );.  pArg =
c380: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
c390: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
c3a0: 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20   i++, pArg++){. 
c3b0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
c3c0: 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a 20  Valid(pArg) );. 
c3d0: 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41     apVal[i] = pA
c3e0: 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  rg;.    Deepheme
c3f0: 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20 20  ralize(pArg);.  
c400: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
c410: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67  (pOp->p2+i, pArg
c420: 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  );.  }..  assert
c430: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
c440: 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63  4_FUNCDEF );.  c
c450: 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
c460: 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e  p4.pFunc;.  ctx.
c470: 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e  iOp = pc;.  ctx.
c480: 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 4d 65 6d  pVdbe = p;.  Mem
c490: 53 65 74 54 79 70 65 46 6c 61 67 28 63 74 78 2e  SetTypeFlag(ctx.
c4a0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
c4b0: 0a 20 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41  .  ctx.fErrorOrA
c4c0: 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61  ux = 0;.  db->la
c4d0: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
c4e0: 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75  wid;.  (*ctx.pFu
c4f0: 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c  nc->xFunc)(&ctx,
c500: 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49   n, apVal); /* I
c510: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
c520: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
c530: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
c540: 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72  ;  /* Remember r
c550: 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64  owid changes mad
c560: 65 20 62 79 20 78 46 75 6e 63 20 2a 2f 0a 0a 20  e by xFunc */.. 
c570: 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74   /* If the funct
c580: 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20  ion returned an 
c590: 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20  error, throw an 
c5a0: 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69  exception */.  i
c5b0: 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41  f( ctx.fErrorOrA
c5c0: 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 63 74  ux ){.    if( ct
c5d0: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
c5e0: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
c5f0: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
c600: 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
c610: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 63 74  e3_value_text(ct
c620: 78 2e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20  x.pOut));.      
c630: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
c640: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
c650: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
c660: 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70 2d  Data(p, pc, pOp-
c670: 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  >p1);.  }..  /* 
c680: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
c690: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c6a0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
c6b0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
c6c0: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
c6d0: 63 74 78 2e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ctx.pOut, encodi
c6e0: 6e 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ng);.  if( sqlit
c6f0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
c700: 63 74 78 2e 70 4f 75 74 29 20 29 7b 0a 20 20 20  ctx.pOut) ){.   
c710: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
c720: 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54   }..  REGISTER_T
c730: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 63 74  RACE(pOp->p3, ct
c740: 78 2e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  x.pOut);.  UPDAT
c750: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 63  E_MAX_BLOBSIZE(c
c760: 74 78 2e 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  tx.pOut);.  brea
c770: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c780: 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33   BitAnd P1 P2 P3
c790: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c7a0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72  :  r[P3]=r[P1]&r
c7b0: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
c7c0: 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44  the bit-wise AND
c7d0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
c7e0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c7f0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
c800: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c810: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c820: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c830: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c840: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c850: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72  /* Opcode: BitOr
c860: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c870: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c880: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
c890: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c8a0: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
c8b0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c8c0: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
c8d0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
c8e0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c8f0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c900: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c910: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c920: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c930: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
c940: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c950: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
c960: 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]<<r[P1].**.**
c970: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
c980: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
c990: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
c9a0: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
c9b0: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
c9c0: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
c9d0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
c9e0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
c9f0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ca00: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ca10: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ca20: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ca30: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ca40: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
ca50: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
ca60: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
ca70: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
ca80: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
ca90: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
caa0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
cab0: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
cac0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
cad0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
cae0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
caf0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
cb00: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
cb10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
cb20: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
cb30: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
cb40: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
cb50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
cb60: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
cb70: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cb80: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
cb90: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cba0: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cbc0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
cbd0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
cbe0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
cbf0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
cc00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cc10: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
cc20: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
cc30: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
cc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cc50: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
cc60: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
cc70: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
cc80: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
cc90: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
cca0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ccb0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
ccc0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
ccd0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
cce0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
ccf0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
cd00: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
cd10: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
cd20: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
cd30: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
cd40: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
cd50: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
cd60: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
cd70: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
cd80: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
cd90: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
cda0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
cdb0: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
cdc0: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
cdd0: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
cde0: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
cdf0: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
ce00: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
ce10: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
ce20: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
ce30: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
ce40: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
ce50: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
ce60: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
ce70: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
ce80: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
ce90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
cea0: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
ceb0: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
cec0: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
ced0: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
cee0: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
cef0: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
cf00: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
cf10: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
cf20: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
cf30: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
cf40: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
cf50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
cf60: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
cf70: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
cf80: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
cf90: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
cfa0: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
cfb0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
cfc0: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
cfd0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
cfe0: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
cff0: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
d000: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
d010: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
d020: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
d030: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
d040: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
d050: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
d060: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
d070: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
d080: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
d090: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
d0a0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d0b0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
d0c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d0d0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
d0e0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
d0f0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d  ynopsis:  r[P1]=
d100: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
d110: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
d120: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
d130: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
d140: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
d150: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
d160: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
d170: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
d180: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d190: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
d1a0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
d1b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
d1c0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
d1d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d1e0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
d1f0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
d200: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
d210: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
d220: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
d230: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
d240: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d250: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
d260: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
d270: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
d280: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
d290: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
d2a0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
d2b0: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
d2c0: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
d2d0: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
d2e0: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
d2f0: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
d300: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
d310: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
d320: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
d330: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
d340: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
d350: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
d360: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
d370: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
d380: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d390: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d3a0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d3b0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
d3c0: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
d3d0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
d3e0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
d3f0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d400: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
d410: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
d420: 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  _Int)==0, 2);.  
d430: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d440: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
d450: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
d460: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
d470: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
d480: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
d490: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
d4a0: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
d4b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d4c0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
d4d0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
d4e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
d4f0: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
d500: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
d510: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d520: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d530: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d540: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
d550: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
d560: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
d570: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
d580: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
d590: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
d5a0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
d5b0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
d5c0: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
d5d0: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
d5e0: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
d5f0: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
d600: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
d610: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
d620: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
d630: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
d640: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
d650: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
d660: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
d670: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
d680: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
d690: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
d6a0: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d6d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d6e0: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
d6f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
d700: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d710: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
d720: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d730: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
d740: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
d750: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  AST./* Opcode: C
d760: 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
d770: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
d780: 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a  inity(r[P1]).**.
d790: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d7a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d7b0: 31 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65  1 to be the type
d7c0: 20 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a   defined by P2..
d7d0: 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ** .** <ul>.** <
d7e0: 6c 69 20 76 61 6c 75 65 3d 22 39 37 22 3e 20 54  li value="97"> T
d7f0: 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  EXT.** <li value
d800: 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c  ="98"> BLOB.** <
d810: 6c 69 20 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e  li value="99"> N
d820: 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61  UMERIC.** <li va
d830: 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e 54 45 47  lue="100"> INTEG
d840: 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  ER.** <li value=
d850: 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c  "101"> REAL.** <
d860: 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  /ul>.**.** A NUL
d870: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d880: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d890: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d8a0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d8b0: 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20  e OP_Cast: {    
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d8d0: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
d8e0: 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54  ( pOp->p2>=SQLIT
d8f0: 45 5f 41 46 46 5f 4e 4f 4e 45 20 26 26 20 70 4f  E_AFF_NONE && pO
d900: 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46  p->p2<=SQLITE_AF
d910: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74  F_REAL );.  test
d920: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
d930: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
d940: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
d950: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
d960: 46 5f 4e 4f 4e 45 20 29 3b 0a 20 20 74 65 73 74  F_NONE );.  test
d970: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
d980: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
d990: 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  C );.  testcase(
d9a0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
d9b0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a  _AFF_INTEGER );.
d9c0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
d9d0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
d9e0: 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d  REAL );.  pIn1 =
d9f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
da00: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
da10: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
da20: 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
da30: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
da40: 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31  VdbeMemCast(pIn1
da50: 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64  , pOp->p2, encod
da60: 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
da70: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
da80: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
da90: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
daa0: 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20  MIT_CAST */../* 
dab0: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
dac0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
dad0: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c  opsis: if r[P1]<
dae0: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
daf0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
db00: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
db10: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
db20: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
db30: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
db40: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
db50: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
db60: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
db70: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
db80: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
db90: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
dba0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
dbb0: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
dbc0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
dbd0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
dbe0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
dbf0: 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74  l through if eit
dc00: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
dc10: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
dc20: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
dc30: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
dc40: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
dc50: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
dc60: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
dc70: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
dc80: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
dc90: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
dca0: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
dcb0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
dcc0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
dcd0: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
dce0: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
dcf0: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
dd00: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
dd10: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
dd20: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
dd30: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
dd40: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
dd50: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
dd60: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
dd70: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
dd80: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
dd90: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
dda0: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
ddb0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
ddc0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
ddd0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
dde0: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
ddf0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
de00: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
de10: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
de20: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
de30: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
de40: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
de50: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
de60: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
de70: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
de80: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
de90: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
dea0: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
deb0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
dec0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
ded0: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
dee0: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
def0: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
df00: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
df10: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
df20: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
df30: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
df40: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
df50: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
df60: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
df70: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
df80: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
df90: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
dfa0: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
dfb0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
dfc0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
dfd0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
dfe0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
dff0: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
e000: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
e010: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
e020: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
e030: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
e040: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74  LITE_STOREP2 bit
e050: 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
e060: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e  hen do not jump.
e070: 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74    Instead,.** st
e080: 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65  ore a boolean re
e090: 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20  sult (either 0, 
e0a0: 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69  or 1, or NULL) i
e0b0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
e0c0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e0d0: 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73  TE_NULLEQ bit is
e0e0: 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e   set in P5, then
e0f0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
e100: 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65   considered.** e
e110: 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74  qual to one anot
e120: 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68  her, provided th
e130: 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68  at they do not h
e140: 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c  ave their MEM_Cl
e150: 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74  eared.** bit set
e160: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e170: 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ne P1 P2 P3 P4 P
e180: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
e190: 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67  f r[P1]!=r[P3] g
e1a0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
e1b0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e1c0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e1d0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e1e0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e1f0: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
e200: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
e210: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
e220: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
e230: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Lt opcode for.**
e240: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e250: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e260: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e270: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e280: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e290: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e2a0: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e2b0: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e2c0: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e2d0: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e2e0: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e2f0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e300: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66   comparison is f
e310: 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72  alse.  If either
e320: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e330: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e340: 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20   is true..** If 
e350: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e360: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e370: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e380: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e390: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e3a0: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e3b0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e3c0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .*/./* Opcode: E
e3d0: 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  q P1 P2 P3 P4 P5
e3e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e3f0: 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f   r[P1]==r[P3] go
e400: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e410: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e420: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e430: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e440: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e450: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
e460: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
e470: 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c  and P3 are equal
e480: 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20  ..** See the Lt 
e490: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
e4a0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e4b0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
e4c0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
e4d0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
e4e0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e4f0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
e500: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
e510: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
e520: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
e530: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e540: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e550: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
e560: 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20  rison is true.  
e570: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
e580: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
e590: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
e5a0: 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  se..** If neithe
e5b0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e5c0: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e5d0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e5e0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e5f0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e600: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e610: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
e620: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
e630: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e640: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e650: 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  <=r[P3] goto P2.
e660: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e670: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e680: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e690: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e6a0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e6b0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
e6c0: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
e6d0: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
e6e0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e6f0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e700: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e710: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e720: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e730: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
e740: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e750: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e760: 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20  [P1]>r[P3] goto 
e770: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
e780: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
e790: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
e7a0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
e7b0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
e7c0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
e7d0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
e7e0: 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63  eater than the c
e7f0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e800: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e810: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e820: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e830: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
e840: 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20  pcode: Ge P1 P2 
e850: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e860: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d  psis: if r[P1]>=
e870: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e880: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e890: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e8a0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e8b0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e8c0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
e8d0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
e8e0: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
e8f0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
e900: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
e910: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
e920: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
e930: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
e940: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e950: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20  */.case OP_Eq:  
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e970: 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a  same as TK_EQ, j
e980: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e990: 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20  .case OP_Ne:    
e9a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e9b0: 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d  me as TK_NE, jum
e9c0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e9d0: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20  ase OP_Lt:      
e9e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e9f0: 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c   as TK_LT, jump,
ea00: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ea10: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20  e OP_Le:        
ea20: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ea30: 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69  s TK_LE, jump, i
ea40: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ea50: 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Gt:          
ea60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ea70: 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GT, jump, in1
ea80: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ea90: 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Ge: {          
eaa0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
eab0: 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GE, jump, in1, 
eac0: 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
ead0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
eae0: 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f  Result of the co
eaf0: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31  mparison of pIn1
eb00: 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f   against pIn3 */
eb10: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
eb20: 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
eb30: 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f  ty to use for co
eb40: 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31  mparison */.  u1
eb50: 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20  6 flags1;       
eb60: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
eb70: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
eb80: 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75  n1->flags */.  u
eb90: 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20  16 flags3;      
eba0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
ebb0: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
ebc0: 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20  In3->flags */.. 
ebd0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ebe0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
ebf0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
ec00: 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31  .  flags1 = pIn1
ec10: 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73  ->flags;.  flags
ec20: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
ec30: 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c  .  if( (flags1 |
ec40: 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c   flags3)&MEM_Nul
ec50: 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20  l ){.    /* One 
ec60: 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  or both operands
ec70: 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   are NULL */.   
ec80: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
ec90: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a  QLITE_NULLEQ ){.
eca0: 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49        /* If SQLI
ecb0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
ecc0: 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c   (which will onl
ecd0: 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20  y happen if the 
ece0: 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20  operator is.    
ecf0: 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50    ** OP_Eq or OP
ed00: 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74  _Ne) then take t
ed10: 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64  he jump or not d
ed20: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
ed30: 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20  her.      ** or 
ed40: 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64  not both operand
ed50: 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20  s are null..    
ed60: 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
ed70: 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
ed80: 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70  OP_Eq || pOp->op
ed90: 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20  code==OP_Ne );. 
eda0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c       assert( (fl
edb0: 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72  ags1 & MEM_Clear
edc0: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ed)==0 );.      
edd0: 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
ede0: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
edf0: 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20  NULL)==0 );.    
ee00: 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45    if( (flags1&ME
ee10: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
ee20: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
ee30: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
ee40: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
ee50: 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20  Cleared)==0.    
ee60: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73    ){.        res
ee70: 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74   = 0;  /* Result
ee80: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
ee90: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
eea0: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
eeb0: 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74   Results are not
eec0: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
eed0: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
eee0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
eef0: 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
ef00: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
ef10: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
ef20: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
ef30: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
ef40: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
ef50: 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
ef60: 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
ef70: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
ef80: 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
ef90: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
efa0: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
efb0: 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  EP2 ){.        p
efc0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
efd0: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65  >p2];.        Me
efe0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
eff0: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
f000: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
f010: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
f020: 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
f030: 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  {.        VdbeBr
f040: 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a  anchTaken(2,3);.
f050: 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d          if( pOp-
f060: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
f070: 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20  PIFNULL ){.     
f080: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
f090: 32 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  2-1;.        }. 
f0a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
f0b0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
f0c0: 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65  e{.    /* Neithe
f0d0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f0e0: 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69  L.  Do a compari
f0f0: 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69  son. */.    affi
f100: 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26  nity = pOp->p5 &
f110: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
f120: 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69  ;.    if( affini
f130: 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty>=SQLITE_AFF_N
f140: 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20  UMERIC ){.      
f150: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
f160: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
f170: 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
f180: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
f190: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
f1a0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b  ffinity(pIn1,0);
f1b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
f1c0: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
f1d0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
f1e0: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
f1f0: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
f200: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
f210: 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a  finity(pIn3,0);.
f220: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f230: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d  e if( affinity==
f240: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
f250: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
f260: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f270: 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e 31  Str)==0 && (pIn1
f280: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
f290: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
f2a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
f2b0: 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
f2c0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
f2d0: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
f2e0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f2f0: 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
f300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
f310: 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c  mStringify(pIn1,
f320: 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
f330: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
f340: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
f350: 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
f360: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
f370: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
f380: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
f390: 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
f3a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
f3b0: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
f3c0: 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
f3d0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
f3e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
f3f0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
f400: 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In3, encoding, 1
f410: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
f420: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
f430: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
f440: 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
f450: 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
f460: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
f470: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
f480: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f490: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
f4a0: 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 31  1);.      flags1
f4b0: 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20   &= ~MEM_Zero;. 
f4c0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49 6e     }.    if( pIn
f4d0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  3->flags & MEM_Z
f4e0: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
f4f0: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
f500: 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
f510: 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d 45     flags3 &= ~ME
f520: 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20  M_Zero;.    }.  
f530: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
f540: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
f550: 5f 6d 65 6d 3b 0a 20 20 20 20 72 65 73 20 3d 20  _mem;.    res = 
f560: 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
f570: 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f  e(pIn3, pIn1, pO
f580: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20  p->p4.pColl);.  
f590: 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d  }.  switch( pOp-
f5a0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63  >opcode ){.    c
f5b0: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65  ase OP_Eq:    re
f5c0: 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20  s = res==0;     
f5d0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
f5e0: 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Ne:    res = 
f5f0: 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61  res!=0;     brea
f600: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
f610: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  t:    res = res<
f620: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
f630: 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20     case OP_Le:  
f640: 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20    res = res<=0; 
f650: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
f660: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65  ase OP_Gt:    re
f670: 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20  s = res>0;      
f680: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
f690: 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20  lt:       res = 
f6a0: 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61  res>=0;     brea
f6b0: 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f  k;.  }..  if( pO
f6c0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
f6d0: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f  TOREP2 ){.    pO
f6e0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
f6f0: 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  p2];.    memAbou
f700: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
f710: 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
f720: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f730: 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
f740: 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20  >u.i = res;.    
f750: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
f760: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
f770: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
f780: 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
f790: 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  =0, (pOp->p5 & S
f7a0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a  QLITE_NULLEQ)?2:
f7b0: 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  3);.    if( res 
f7c0: 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
f7d0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  p->p2-1;.    }. 
f7e0: 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79   }.  /* Undo any
f7f0: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
f800: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
f810: 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
f820: 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49  gisters. */.  pI
f830: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n1->flags = flag
f840: 73 31 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67  s1;.  pIn3->flag
f850: 73 20 3d 20 66 6c 61 67 73 33 3b 0a 20 20 62 72  s = flags3;.  br
f860: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f870: 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
f880: 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
f890: 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
f8a0: 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
f8b0: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
f8c0: 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72  tor to be the ar
f8d0: 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ray.** of intege
f8e0: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20  rs in P4..**.** 
f8f0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
f900: 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e  is only valid un
f910: 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f  til the next OP_
f920: 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61 73  Compare that has
f930: 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50  .** the OPFLAG_P
f940: 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20 69  ERMUTE bit set i
f950: 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20  n P5. Typically 
f960: 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  the OP_Permutati
f970: 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63  on should .** oc
f980: 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  cur immediately 
f990: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f  prior to the OP_
f9a0: 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65  Compare..*/.case
f9b0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a   OP_Permutation:
f9c0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
f9d0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
f9e0: 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72  ARRAY );.  asser
f9f0: 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b  t( pOp->p4.ai );
fa00: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f  .  aPermute = pO
fa10: 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61  p->p4.ai;.  brea
fa20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fa30: 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50   Compare P1 P2 P
fa40: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
fa50: 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d  sis: r[P1@P3] <-
fa60: 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  > r[P2@P3].**.**
fa70: 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63   Compare two vec
fa80: 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72  tors of register
fa90: 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65  s in reg(P1)..re
faa0: 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c  g(P1+P3-1) (call
fab0: 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20   this.** vector 
fac0: 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28  "A") and in reg(
fad0: 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31  P2)..reg(P2+P3-1
fae0: 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74  ) ("B").  Save t
faf0: 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
fb00: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  the comparison f
fb10: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65  or use by the ne
fb20: 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  xt OP_Jump instr
fb30: 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  uct..**.** If P5
fb40: 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
fb50: 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c  PERMUTE bit set,
fb60: 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
fb70: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
fb80: 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .** determined b
fb90: 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  y the most recen
fba0: 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  t OP_Permutation
fbb0: 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74   operator.  If t
fbc0: 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52  he.** OPFLAG_PER
fbd0: 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65 61  MUTE bit is clea
fbe0: 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  r, then register
fbf0: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e   are compared in
fc00: 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f   sequential.** o
fc10: 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  rder..**.** P4 i
fc20: 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  s a KeyInfo stru
fc30: 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e  cture that defin
fc40: 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  es collating seq
fc50: 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a  uences and sort.
fc60: 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68  ** orders for th
fc70: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
fc80: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61  he permutation a
fc90: 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74  pplies to regist
fca0: 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  ers.** only.  Th
fcb0: 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e  e KeyInfo elemen
fcc0: 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75  ts are used sequ
fcd0: 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  entially..**.** 
fce0: 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  The comparison i
fcf0: 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69  s a sort compari
fd00: 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f  son, so NULLs co
fd10: 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20  mpare equal,.** 
fd20: 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74  NULLs are less t
fd30: 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d  han numbers, num
fd40: 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68  bers are less th
fd50: 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61  an strings,.** a
fd60: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c  nd strings are l
fd70: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
fd80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61  */.case OP_Compa
fd90: 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  re: {.  int n;. 
fda0: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31   int i;.  int p1
fdb0: 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f  ;.  int p2;.  co
fdc0: 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
fdd0: 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78  yInfo;.  int idx
fde0: 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ;.  CollSeq *pCo
fdf0: 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  ll;    /* Collat
fe00: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ing sequence to 
fe10: 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d  use on this term
fe20: 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20   */.  int bRev; 
fe30: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
fe40: 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20   for DESCENDING 
fe50: 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20  sort order */.. 
fe60: 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
fe70: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d  OPFLAG_PERMUTE)=
fe80: 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20  =0 ) aPermute = 
fe90: 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  0;.  n = pOp->p3
fea0: 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ;.  pKeyInfo = p
feb0: 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
fec0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29  .  assert( n>0 )
fed0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79  ;.  assert( pKey
fee0: 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20  Info!=0 );.  p1 
fef0: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
ff00: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53  = pOp->p2;.#if S
ff10: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
ff20: 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20  ( aPermute ){.  
ff30: 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b    int k, mx = 0;
ff40: 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c  .    for(k=0; k<
ff50: 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72  n; k++) if( aPer
ff60: 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20  mute[k]>mx ) mx 
ff70: 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20  = aPermute[k];. 
ff80: 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
ff90: 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p1+mx<=(p->nM
ffa0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
ffb0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
ffc0: 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28  p2>0 && p2+mx<=(
ffd0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
ffe0: 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65  or)+1 );.  }else
fff0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31  {.    assert( p1
10000 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e  >0 && p1+n<=(p->
10010 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
10020 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
10030 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d  ( p2>0 && p2+n<=
10040 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
10050 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  sor)+1 );.  }.#e
10060 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
10070 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
10080 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
10090 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
100a0 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
100b0 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   i;.    assert( 
100c0 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
100d0 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p1+idx]) );.   
100e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
100f0 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78  lid(&aMem[p2+idx
10100 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
10110 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
10120 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b   &aMem[p1+idx]);
10130 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
10140 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65  ACE(p2+idx, &aMe
10150 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
10160 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
10170 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  fo->nField );.  
10180 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
10190 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
101a0 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
101b0 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
101c0 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
101d0 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
101e0 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  re(&aMem[p1+idx]
101f0 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  , &aMem[p2+idx],
10200 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
10210 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
10220 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
10230 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
10240 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
10250 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65  .    }.  }.  aPe
10260 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65  rmute = 0;.  bre
10270 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10280 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
10290 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
102a0 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
102b0 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
102c0 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
102d0 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
102e0 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
102f0 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
10300 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
10310 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
10320 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
10330 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
10340 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
10350 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
10360 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
10370 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
10380 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
10390 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
103a0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
103b0 31 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e  1 - 1;  VdbeBran
103c0 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 0a 20 20  chTaken(0,3);.  
103d0 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
103e0 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  re==0 ){.    pc 
103f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20  = pOp->p2 - 1;  
10400 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
10410 31 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  1,3);.  }else{. 
10420 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20     pc = pOp->p3 
10430 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
10440 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 7d 0a  Taken(2,3);.  }.
10450 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10460 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
10470 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
10480 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
10490 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] && r[P2]).**.*
104a0 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
104b0 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
104c0 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
104d0 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
104e0 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
104f0 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
10500 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
10510 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
10520 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
10530 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
10540 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
10550 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
10560 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
10570 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
10580 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
10590 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
105a0 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
105b0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
105c0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
105d0 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] || r[P2]).**.*
105e0 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
105f0 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
10600 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
10610 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
10620 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
10630 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
10640 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
10650 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
10660 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
10670 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
10680 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
10690 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
106a0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
106b0 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
106c0 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
106d0 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
106e0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
106f0 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
10700 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
10710 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
10720 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
10730 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
10740 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
10750 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
10760 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
10770 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
10780 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
10790 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
107a0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
107b0 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
107c0 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
107d0 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
107e0 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
107f0 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
10800 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
10810 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
10820 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
10830 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v1 = 2;.  }else
10840 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74  {.    v1 = sqlit
10850 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
10860 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70  In1)!=0;.  }.  p
10870 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
10880 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32  >p2];.  if( pIn2
10890 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
108a0 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
108b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
108c0 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
108d0 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
108e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
108f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
10900 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
10910 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
10920 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
10930 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
10940 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
10950 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
10960 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
10970 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
10980 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
10990 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
109a0 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
109b0 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
109c0 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
109d0 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
109e0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
109f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
10a00 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
10a10 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
10a20 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
10a30 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
10a40 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
10a50 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10a60 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
10a70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10a80 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32  pcode: Not P1 P2
10a90 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
10aa0 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31  is: r[P2]= !r[P1
10ab0 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
10ac0 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
10ad0 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20  egister P1 as a 
10ae0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20  boolean value.  
10af0 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f  Store the.** boo
10b00 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  lean complement 
10b10 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
10b20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
10b30 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10b40 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61  .** NULL, then a
10b50 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20   NULL is stored 
10b60 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
10b70 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  P_Not: {        
10b80 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10b90 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20  as TK_NOT, in1, 
10ba0 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
10bb0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10bc0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
10bd0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
10be0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
10bf0 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28  l(pOut);.  if( (
10c00 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10c10 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
10c20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
10c30 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
10c40 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65  t->u.i = !sqlite
10c50 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
10c60 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
10c70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10c80 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
10c90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
10ca0 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a  r[P1]= ~r[P1].**
10cb0 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
10cc0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
10cd0 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69  ister P1 as an i
10ce0 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74  nteger.  Store t
10cf0 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c  he.** ones-compl
10d00 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20  ement of the P1 
10d10 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
10d20 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68  ter P2.  If P1 h
10d30 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74  olds.** a NULL t
10d40 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  hen store a NULL
10d50 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
10d60 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20  OP_BitNot: {    
10d70 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
10d80 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69   as TK_BITNOT, i
10d90 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
10da0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10db0 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
10dc0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10dd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
10de0 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
10df0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
10e00 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
10e10 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
10e20 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
10e30 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71   pOut->u.i = ~sq
10e40 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10e50 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
10e60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10e70 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
10e80 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
10e90 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67   the "once" flag
10ea0 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69   number P1. If i
10eb0 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74  t is set, jump t
10ec0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
10ed0 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  . .** Otherwise,
10ee0 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e   set the flag an
10ef0 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
10f00 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
10f10 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74  uction..** In ot
10f20 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20  her words, this 
10f30 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c  opcode causes al
10f40 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f  l following opco
10f50 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50  des up through P
10f60 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e  2.** (but not in
10f70 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72  cluding P2) to r
10f80 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64  un just once and
10f90 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f   to be skipped o
10fa0 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  n subsequent.** 
10fb0 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68  times through th
10fc0 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c  e loop..**.** Al
10fd0 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61  l "once" flags a
10fe0 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65  re initially cle
10ff0 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20  ared whenever a 
11000 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
11010 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69  nt.** first begi
11020 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61  ns to run..*/.ca
11030 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
11040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11050 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
11060 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
11070 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61  lag );.  VdbeBra
11080 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63  nchTaken(p->aOnc
11090 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d  eFlag[pOp->p1]!=
110a0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e  0, 2);.  if( p->
110b0 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
110c0 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  1] ){.    pc = p
110d0 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
110e0 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
110f0 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
11100 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11110 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
11120 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
11130 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
11140 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11150 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
11160 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
11170 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
11180 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
11190 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
111a0 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
111b0 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
111c0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
111d0 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
111e0 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
111f0 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
11200 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
11210 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
11220 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11230 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11240 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
11250 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
11260 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
11270 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
11280 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
11290 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
112a0 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
112b0 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
112c0 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
112d0 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
112e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
11310 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
11320 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
11330 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
11340 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
11350 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11360 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
11370 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
11380 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
11390 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
113a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
113b0 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
113c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
113d0 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
113e0 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
113f0 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
11400 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
11410 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
11420 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
11430 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
11440 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
11450 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
11460 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63   if( c ){.    pc
11470 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
11480 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11490 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
114a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
114b0 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
114c0 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
114d0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
114e0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
114f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11500 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
11510 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
11520 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11530 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
11540 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
11550 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11560 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
11570 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
11580 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
11590 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
115a0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
115b0 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
115c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
115d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
115e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
115f0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
11600 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
11610 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
11620 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11630 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11640 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11650 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
11660 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
11670 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
11680 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11690 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
116a0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
116b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
116c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
116d0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
116e0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
116f0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11700 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11710 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
11720 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
11730 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11740 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
11750 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
11760 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
11770 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
11780 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
11790 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
117a0 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
117b0 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
117c0 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
117d0 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
117e0 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
117f0 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
11800 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
11810 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11820 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
11830 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
11840 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
11850 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
11860 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
11870 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
11880 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
11890 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
118a0 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
118b0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
118c0 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
118d0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
118e0 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
118f0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
11900 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
11910 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
11920 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
11930 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
11940 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
11950 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
11960 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
11970 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
11980 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
11990 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
119a0 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
119b0 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
119c0 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
119d0 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
119e0 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
119f0 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
11a00 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
11a10 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
11a20 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
11a30 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
11a40 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
11a50 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
11a60 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
11a70 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
11a80 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
11a90 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
11aa0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
11ab0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
11ac0 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
11ad0 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
11ae0 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
11af0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
11b00 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
11b10 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
11b20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
11b30 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
11b40 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
11b50 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
11b60 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
11b70 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
11b80 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
11b90 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
11ba0 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
11bb0 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
11bc0 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
11bd0 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
11be0 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64   {.  i64 payload
11bf0 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
11c00 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
11c10 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
11c20 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
11c30 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
11c40 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
11c50 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
11c60 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
11c70 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
11c80 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
11c90 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
11ca0 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
11cb0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
11cc0 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
11cd0 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
11ce0 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
11cf0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
11d00 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
11d10 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
11d20 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
11d30 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
11d40 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
11d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
11d60 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
11d70 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
11d80 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
11d90 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
11da0 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
11db0 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
11dc0 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
11dd0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
11de0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
11df0 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
11e00 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
11e10 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
11e20 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
11e30 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
11e40 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
11e50 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
11e60 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
11e70 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
11e80 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
11e90 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
11ea0 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
11eb0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
11ec0 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
11ed0 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65  a */.  u32 szFie
11ee0 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ld;       /* Num
11ef0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11f00 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
11f10 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20   field */.  u32 
11f20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
11f30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
11f40 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
11f50 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20  ata */.  u32 t; 
11f60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
11f70 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20   type code from 
11f80 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
11f90 72 20 2a 2f 0a 20 20 75 31 36 20 66 78 3b 20 20  r */.  u16 fx;  
11fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 44 65            /* pDe
11fb0 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65 20  st->flags value 
11fc0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20  */.  Mem *pReg; 
11fd0 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64          /* Pseud
11fe0 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67  oTable input reg
11ff0 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d  ister */..  p2 =
12000 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
12010 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
12020 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
12030 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
12040 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
12050 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
12060 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
12070 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
12080 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
12090 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
120a0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
120b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
120c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
120d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
120e0 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
120f0 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
12100 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e 46 69 65  aType + pC->nFie
12110 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ld;.#ifndef SQLI
12120 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
12130 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
12140 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
12150 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0 ); /* OP_Colum
12160 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20 6f  n never called o
12170 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  n virtual table 
12180 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73  */.#endif.  pCrs
12190 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
121a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
121b0 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64  !=0 || pC->pseud
121c0 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f  oTableReg>0 ); /
121d0 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20  * pCrsr NULL on 
121e0 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
121f0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
12200 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  =0 || pC->nullRo
12210 77 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  w );          /*
12220 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20   pC->nullRow on 
12230 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
12240 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
12250 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
12260 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d  le, bring it up-
12270 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20  to-date */.  rc 
12280 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
12290 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
122a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
122b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
122c0 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  r;.  if( pC->cac
122d0 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63  heStatus!=p->cac
122e0 68 65 43 74 72 20 7c 7c 20 28 70 4f 70 2d 3e 70  heCtr || (pOp->p
122f0 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  5&OPFLAG_CLEARCA
12300 43 48 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  CHE)!=0 ){.    i
12310 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
12320 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72 73  {.      if( pCrs
12330 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r==0 ){.        
12340 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
12350 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a  doTableReg>0 );.
12360 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
12370 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54  aMem[pC->pseudoT
12380 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
12390 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
123a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
123b0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
123c0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
123d0 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
123e0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
123f0 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76  = pC->szRow = av
12400 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ail = pReg->n;. 
12410 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
12420 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
12430 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12440 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
12450 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
12460 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  ull);.        go
12470 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
12480 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
12490 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
124a0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
124b0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
124c0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
124d0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
124e0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
124f0 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
12500 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
12510 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
12520 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  eySize(pCrsr, &p
12530 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20  ayloadSize64);. 
12540 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
12550 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
12560 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
12570 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
12580 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
12590 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
125a0 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c  e3BtreeParseCell
125b0 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56 61  Ptr() uses getVa
125c0 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72  rint32() to extr
125d0 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20 20  act the.        
125e0 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
125f0 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
12600 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
12610 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
12620 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
12630 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
12640 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12650 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
12660 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
12670 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
12680 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20 20  ze64 );.        
12690 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
126a0 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28  e3BtreeKeyFetch(
126b0 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
126c0 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
126d0 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
126e0 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
126f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12700 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
12710 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
12720 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
12730 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
12740 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
12750 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
12760 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  , &pC->payloadSi
12770 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ze);.        ass
12780 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12790 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53  OK );   /* DataS
127a0 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
127b0 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43 2d  l */.        pC-
127c0 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
127d0 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
127e0 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
127f0 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
12800 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36  rt( avail<=65536
12810 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20   );  /* Maximum 
12820 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b  page size is 64K
12830 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  iB */.      if( 
12840 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12850 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b  <= (u32)avail ){
12860 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
12870 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ow = pC->payload
12880 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Size;.      }els
12890 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73  e{.        pC->s
128a0 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20  zRow = avail;.  
128b0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
128c0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
128d0 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
128e0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
128f0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
12900 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
12910 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12920 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
12930 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
12940 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66  .    pC->iHdrOff
12950 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33  set = getVarint3
12960 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73  2(pC->aRow, offs
12970 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64  et);.    pC->nHd
12980 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20  rParsed = 0;.   
12990 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66   aOffset[0] = of
129a0 66 73 65 74 3b 0a 20 20 20 20 69 66 28 20 61 76  fset;.    if( av
129b0 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20  ail<offset ){.  
129c0 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20      /* pC->aRow 
129d0 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
129e0 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65   hold the entire
129f0 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65   row, but it doe
12a00 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20  s at least.     
12a10 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65   ** need to cove
12a20 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20  r the header of 
12a30 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20  the record.  If 
12a40 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
12a50 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20  t contain.      
12a60 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** the complete 
12a70 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74  header, then set
12a80 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72   it to zero, for
12a90 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20  cing the header 
12aa0 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64  to be.      ** d
12ab0 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
12ac0 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ated. */.      p
12ad0 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
12ae0 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30     pC->szRow = 0
12af0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
12b00 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
12b10 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
12b20 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
12b30 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
12b40 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73  ..    ** Do this
12b50 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
12b60 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
12b70 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
12b80 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20   **.    ** Type 
12b90 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
12ba0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
12bb0 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
12bc0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
12bd0 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
12be0 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
12bf0 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
12c00 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
12c10 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68   32 of.    ** th
12c20 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
12c30 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
12c40 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
12c50 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
12c60 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
12c70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
12c80 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
12c90 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
12ca0 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74  three.    ** ext
12cb0 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
12cc0 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
12cd0 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
12ce0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
12cf0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73   */.    if( offs
12d00 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66  et > 98307 || of
12d10 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  fset > pC->paylo
12d20 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20  adSize ){.      
12d30 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
12d40 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
12d50 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
12d60 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
12d70 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
12d80 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
12d90 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
12da0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
12db0 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
12dc0 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
12dd0 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
12de0 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43  aOffset[] and pC
12df0 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a  ->aType[]..  */.
12e00 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
12e10 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
12e20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d  /* If there is m
12e30 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c  ore header avail
12e40 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67  able for parsing
12e50 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
12e60 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78  try.    ** to ex
12e70 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c  tract additional
12e80 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75   fields up throu
12e90 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66  gh the p2+1-th f
12ea0 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ield .    */.   
12eb0 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66   if( pC->iHdrOff
12ec0 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  set<aOffset[0] )
12ed0 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  {.      /* Make 
12ee0 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74  sure zData point
12ef0 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74  s to enough of t
12f00 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76  he record to cov
12f10 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  er the header. *
12f20 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  /.      if( pC->
12f30 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
12f40 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c     memset(&sMem,
12f50 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
12f60 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
12f70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
12f80 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
12f90 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20  , aOffset[0], . 
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fc0 20 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65      !pC->isTable
12fd0 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
12fe0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
12ff0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
13000 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13010 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
13020 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
13030 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
13040 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13050 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
13060 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  Row;.      }.  .
13070 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e        /* Fill in
13080 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e   pC->aType[i] an
13090 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
130a0 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
130b0 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
130c0 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
130d0 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
130e0 6f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  offset = aOffset
130f0 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
13100 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
13110 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
13120 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
13130 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
13140 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70      assert( i<=p
13150 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64  2 && zHdr<zEndHd
13160 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  r );.      do{. 
13170 20 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b         if( zHdr[
13180 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  0]<0x80 ){.     
13190 20 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d       t = zHdr[0]
131a0 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  ;.          zHdr
131b0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ++;.        }els
131c0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
131d0 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
131e0 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
131f0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
13200 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69       pC->aType[i
13210 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73  ] = t;.        s
13220 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33  zField = sqlite3
13230 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
13240 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66  n(t);.        of
13250 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b  fset += szField;
13260 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66  .        if( off
13270 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20  set<szField ){  
13280 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65  /* True if offse
13290 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20  t overflows */. 
132a0 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20           zHdr = 
132b0 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a  &zEndHdr[1];  /*
132c0 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43   Forces SQLITE_C
132d0 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65  ORRUPT return be
132e0 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  low */.         
132f0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
13300 7d 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20  }.        i++;. 
13310 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
13320 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20  ] = offset;.    
13330 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20    }while( i<=p2 
13340 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20  && zHdr<zEndHdr 
13350 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  );.      pC->nHd
13360 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
13370 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
13380 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
13390 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
133a0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
133b0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
133c0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
133d0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  &sMem);.        
133e0 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  sMem.flags = MEM
133f0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  _Null;.      }. 
13400 20 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65   .      /* If we
13410 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
13420 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
13430 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
13440 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
13450 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65      ** or if the
13460 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
13470 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
13480 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e  o be past the en
13490 64 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20 2a  d of the.      *
134a0 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20  * record, or if 
134b0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
134c0 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72  ast field appear
134d0 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74  s to be before t
134e0 68 65 20 65 6e 64 0a 20 20 20 20 20 20 2a 2a 20  he end.      ** 
134f0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 28 77  of the record (w
13500 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70  hen all fields p
13510 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65  resent), then we
13520 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67   must be dealing
13530 20 0a 20 20 20 20 20 20 2a 2a 20 77 69 74 68 20   .      ** with 
13540 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
13550 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
13560 20 20 20 69 66 28 20 28 7a 48 64 72 20 3e 20 7a     if( (zHdr > z
13570 45 6e 64 48 64 72 29 0a 20 20 20 20 20 20 20 7c  EndHdr).       |
13580 7c 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e  | (offset > pC->
13590 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
135a0 20 20 20 20 7c 7c 20 28 7a 48 64 72 3d 3d 7a 45      || (zHdr==zE
135b0 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65 74 21  ndHdr && offset!
135c0 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65  =pC->payloadSize
135d0 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
135e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
135f0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
13600 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13610 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
13620 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a   }.    }..    /*
13630 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
13640 20 74 6f 20 65 78 74 72 61 20 6e 65 77 20 65 6e   to extra new en
13650 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68  tries from the h
13660 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65  eader, nHdrParse
13670 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c  d is.    ** stil
13680 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20  l not up to p2, 
13690 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
136a0 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 66  the record has f
136b0 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20  ewer than p2.   
136c0 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f   ** columns.  So
136d0 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c   the result will
136e0 20 62 65 20 65 69 74 68 65 72 20 74 68 65 20 64   be either the d
136f0 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20  efault value or 
13700 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20  a NULL..    */. 
13710 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50     if( pC->nHdrP
13720 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20  arsed<=p2 ){.   
13730 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
13740 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20  pe==P4_MEM ){.  
13750 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13760 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
13770 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70  pDest, pOp->p4.p
13780 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Mem, MEM_Static)
13790 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
137a0 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
137b0 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d  eFlag(pDest, MEM
137c0 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  _Null);.      }.
137d0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
137e0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
137f0 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63    }..  /* Extrac
13800 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f  t the content fo
13810 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f  r the p2+1-th co
13820 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63  lumn.  Control c
13830 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61  an only.  ** rea
13840 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66  ch this point if
13850 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f   aOffset[p2], aO
13860 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64  ffset[p2+1], and
13870 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61   pC->aType[p2] a
13880 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69  re.  ** all vali
13890 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  d..  */.  assert
138a0 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72  ( p2<pC->nHdrPar
138b0 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sed );.  assert(
138c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
138d0 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
138e0 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
138f0 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29  nvariants(pDest)
13900 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
13910 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20  mDynamic(pDest) 
13920 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
13930 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
13940 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b    t = pC->aType[
13950 70 32 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73  p2];.  if( pC->s
13960 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32  zRow>=aOffset[p2
13970 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  +1] ){.    /* Th
13980 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e  is is the common
13990 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
139a0 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20  desired content 
139b0 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67  fits on the orig
139c0 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65  inal.    ** page
139d0 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e   - where the con
139e0 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61  tent is not on a
139f0 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  n overflow page 
13a00 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
13a10 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e  beSerialGet(pC->
13a20 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d  aRow+aOffset[p2]
13a30 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d  , t, pDest);.  }
13a40 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
13a50 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
13a60 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65   only when conte
13a70 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f  nt is on overflo
13a80 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69  w pages */.    i
13a90 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
13aa0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
13ab0 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
13ac0 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
13ad0 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
13ae0 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
13af0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
13b00 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
13b10 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
13b20 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13b30 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
13b40 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
13b50 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
13b60 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  nt for.      ** 
13b70 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66     1. the typeof
13b80 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20  () function,.   
13b90 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20     **    2. the 
13ba0 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
13bb0 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
13bc0 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20  b, and.      ** 
13bd0 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e     3. if the con
13be0 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a  tent length is z
13bf0 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f  ero..      ** So
13c00 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
13c10 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74  l use bogus cont
13c20 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ent rather than 
13c30 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a  reading.      **
13c40 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
13c50 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77  sk.  NULL will w
13c60 6f 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75  ork for the valu
13c70 65 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20  e for strings.  
13c80 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73      ** and blobs
13c90 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73   and whatever is
13ca0 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53   in the payloadS
13cb0 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20  ize64 variable. 
13cc0 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72       ** will wor
13cd0 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67  k for everything
13ce0 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20   else. */.      
13cf0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13d00 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38  lGet(t<=13 ? (u8
13d10 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  *)&payloadSize64
13d20 20 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b   : 0, t, pDest);
13d30 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13d40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13d50 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
13d60 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
13d70 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54  ], len, !pC->isT
13d80 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b           pDest);
13db0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
13dc0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
13dd0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13de0 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
13df0 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
13e00 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
13e10 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
13e20 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
13e30 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
13e40 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
13e50 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74     }.  }.  pDest
13e60 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
13e70 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
13e80 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f  :.  /* If the co
13e90 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e  lumn value is an
13ea0 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
13eb0 67 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20  g, go ahead and 
13ec0 70 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61  persist.  ** tha
13ed0 74 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65  t string in case
13ee0 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65   the cursor move
13ef0 73 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c  s before the col
13f00 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a  umn value is.  *
13f10 2a 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c  * used.  The fol
13f20 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73  lowing code does
13f30 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
13f40 6f 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  of Deephemeraliz
13f50 65 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65  e().  ** but doe
13f60 73 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a  s it faster. */.
13f70 20 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c    if( (pDest->fl
13f80 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
13f90 21 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20  !=0 && pDest->z 
13fa0 29 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73  ){.    fx = pDes
13fb0 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
13fc0 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  Str|MEM_Blob);. 
13fd0 20 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30     assert( fx!=0
13fe0 20 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   );.    zData = 
13ff0 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
14000 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70  ->z;.    len = p
14010 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28  Dest->n;.    if(
14020 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
14030 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44  learAndResize(pD
14040 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f  est, len+2) ) go
14050 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d  to no_mem;.    m
14060 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20  emcpy(pDest->z, 
14070 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20  zData, len);.   
14080 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
14090 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a   0;.    pDest->z
140a0 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  [len+1] = 0;.   
140b0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
140c0 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  fx|MEM_Term;.  }
140d0 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72  .op_column_error
140e0 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
140f0 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
14100 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
14110 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
14120 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
14130 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
14140 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
14150 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
14160 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
14170 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
14180 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
14190 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
141a0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
141b0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
141c0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
141d0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
141e0 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
141f0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
14200 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
14210 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
14220 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
14230 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
14240 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
14250 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
14260 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
14270 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
14280 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
14290 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
142a0 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
142b0 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
142c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
142d0 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
142e0 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
142f0 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
14300 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
14310 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
14320 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
14330 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
14340 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
14350 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
14360 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
14370 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
14380 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
14390 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
143a0 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
143b0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
143c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
143d0 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
143e0 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
143f0 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
14400 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
14410 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
14420 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
14430 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
14440 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
14450 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
14460 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
14470 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
14480 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
14490 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
144a0 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
144b0 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
144c0 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
144d0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
144e0 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
144f0 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
14500 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
14510 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
14520 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
14530 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
14540 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
14550 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
14560 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
14570 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
14580 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
14590 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
145a0 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
145b0 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
145c0 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
145d0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
145e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
145f0 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
14600 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
14610 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
14620 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
14630 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
14640 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
14650 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
14660 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
14670 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
14680 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
14690 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
146a0 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
146b0 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
146c0 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
146d0 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
146e0 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
146f0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
14700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14710 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
14720 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
14730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14740 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14750 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
14760 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
14770 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14780 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14790 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
147a0 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
147b0 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
147c0 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
147d0 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
147e0 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
147f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14800 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14810 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14820 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14830 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
14840 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14850 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
14860 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
14870 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
14880 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
14890 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
148a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
148b0 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
148c0 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
148d0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
148e0 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
148f0 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
14900 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
14910 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
14920 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14930 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
14940 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
14950 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
14960 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
14970 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
14980 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
14990 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
149a0 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
149b0 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
149c0 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
149d0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
149e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
149f0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
14a00 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72  wRecord[] header
14a10 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14a30 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
14a40 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65  ewRecord[] conte
14a50 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  nt */.  int len;
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14a70 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
14a80 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
14a90 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
14aa0 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
14ab0 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
14ac0 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
14ad0 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
14ae0 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
14b30 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
14b40 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
14b50 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
14b60 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
14b70 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
14b80 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14bd0 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14be0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
14bf0 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
14c00 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
14c10 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
14c20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  and so forth..  
14c30 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
14c40 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
14c50 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
14c60 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
14c70 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
14c80 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
14c90 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
14ca0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14cb0 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14cc0 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14cd0 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14ce0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
14cf0 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
14d00 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
14d10 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
14d20 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
14d30 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
14d40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14d50 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
14d60 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
14d70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14d80 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
14d90 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
14da0 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
14db0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14dc0 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
14dd0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14de0 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
14df0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
14e00 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
14e10 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
14e20 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
14e30 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
14e40 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  Field<=(p->nMem-
14e50 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
14e60 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
14e70 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
14e80 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
14e90 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
14ea0 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
14eb0 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
14ec0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
14ed0 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
14ee0 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
14ef0 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
14f00 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
14f10 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
14f20 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
14f30 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
14f40 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
14f50 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
14f60 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
14f70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
14f80 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
14f90 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
14fa0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
14fb0 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
14fc0 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
14fd0 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
14fe0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
14ff0 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b  lyAffinity(pRec+
15000 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  +, *(zAffinity++
15010 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
15020 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66      assert( zAff
15030 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70  inity[0]==0 || p
15040 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  Rec<=pLast );.  
15050 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
15060 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20  ity[0] );.  }.. 
15070 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
15080 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
15090 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
150a0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
150b0 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
150c0 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
150d0 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
150e0 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
150f0 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74  /.  pRec = pLast
15100 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
15110 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
15120 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72 69  Rec) );.    seri
15130 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
15140 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
15150 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
15160 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
15170 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15180 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
15190 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
151a0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
151b0 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
151c0 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
151d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
151e0 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
151f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
15200 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20         nZero += 
15210 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
15220 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52         len -= pR
15230 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
15240 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
15250 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
15260 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
15270 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20  l_type==127 );. 
15280 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
15290 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b  ial_type==128 );
152a0 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72  .    nHdr += ser
152b0 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20  ial_type<=127 ? 
152c0 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e  1 : sqlite3Varin
152d0 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
152e0 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d  );.  }while( (--
152f0 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b  pRec)>=pData0 );
15300 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
15310 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
15320 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
15330 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 74 65 73  he size */.  tes
15340 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36  tcase( nHdr==126
15350 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
15360 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69  nHdr==127 );.  i
15370 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a  f( nHdr<=126 ){.
15380 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f      /* The commo
15390 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48  n case */.    nH
153a0 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65  dr += 1;.  }else
153b0 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61  {.    /* Rare ca
153c0 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c  se of a really l
153d0 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20  arge header */. 
153e0 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c     nVarint = sql
153f0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
15400 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  dr);.    nHdr +=
15410 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66   nVarint;.    if
15420 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
15430 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
15440 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20   ) nHdr++;.  }. 
15450 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
15460 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ata;.  if( nByte
15470 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
15480 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
15490 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
154a0 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
154b0 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
154c0 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
154d0 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
154e0 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
154f0 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
15500 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
15510 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
15520 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
15530 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
15540 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
15550 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
15560 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
15570 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
15580 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
15590 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75  rAndResize() cou
155a0 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
155b0 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
155c0 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
155d0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
155e0 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
155f0 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
15600 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  e) ){.    goto n
15610 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
15620 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
15630 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
15640 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
15650 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
15660 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
15670 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48   nHdr);.  j = nH
15680 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  dr;.  assert( pD
15690 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
156a0 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
156b0 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c    do{.    serial
156c0 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
156d0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
156e0 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
156f0 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  ;.    i += putVa
15700 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
15710 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
15720 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
15730 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
15740 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74  /.    j += sqlit
15750 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28  e3VdbeSerialPut(
15760 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20  &zNewRecord[j], 
15770 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70  pRec, serial_typ
15780 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a  e); /* content *
15790 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70  /.  }while( (++p
157a0 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
157b0 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72   assert( i==nHdr
157c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d   );.  assert( j=
157d0 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
157e0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
157f0 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
15800 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
15810 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
15820 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
15830 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
15840 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f  lob;.  if( nZero
15850 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
15860 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20  nZero = nZero;. 
15870 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
15880 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a  = MEM_Zero;.  }.
15890 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
158a0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
158b0 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
158c0 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65  is ever converte
158d0 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52  d to text */.  R
158e0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
158f0 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
15900 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
15910 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
15920 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15930 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  : Count P1 P2 * 
15940 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
15950 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a   r[P2]=count().*
15960 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e  *.** Store the n
15970 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
15980 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c   (an integer val
15990 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ue) in the table
159a0 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70   or index .** op
159b0 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
159c0 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  1 in register P2
159d0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
159e0 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
159f0 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74  NT.case OP_Count
15a00 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
15a10 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
15a20 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
15a30 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
15a40 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d  r;..  pCrsr = p-
15a50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
15a60 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
15a70 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e  rt( pCrsr );.  n
15a80 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e  Entry = 0;  /* N
15a90 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
15aa0 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
15ab0 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
15ac0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15ad0 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
15ae0 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d  nEntry);.  pOut-
15af0 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
15b00 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
15b10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
15b20 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
15b30 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
15b40 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
15b50 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
15b60 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
15b70 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
15b80 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
15b90 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
15ba0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
15bb0 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
15bc0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
15bd0 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
15be0 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
15bf0 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
15c00 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
15c10 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
15c20 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
15c30 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
15c60 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
15c70 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
15ca0 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
15cb0 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
15cc0 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
15cd0 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
15ce0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
15cf0 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
15d00 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
15d10 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
15d20 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
15d30 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
15d40 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
15d50 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
15d60 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
15d70 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
15d80 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
15d90 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
15da0 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
15db0 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
15dc0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
15dd0 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
15de0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
15df0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
15e00 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
15e10 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
15e20 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
15e30 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
15e40 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
15e50 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
15e60 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
15e70 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
15e80 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
15e90 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
15ea0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
15eb0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
15ec0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
15ed0 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
15ee0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
15ef0 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
15f00 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
15f10 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
15f20 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
15f30 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
15f40 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
15f50 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
15f60 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
15f70 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
15f80 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
15f90 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
15fa0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
15fb0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  db, "cannot open
15fc0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20   savepoint - ". 
15fd0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
15fe0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
15ff0 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
16000 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16010 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
16020 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74  Name = sqlite3St
16030 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a  rlen30(zName);..
16040 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
16050 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
16060 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
16070 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69  all is Ok even i
16080 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74  f this savepoint
16090 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74   is actually a t
160a0 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20  ransaction.     
160b0 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61   ** savepoint (a
160c0 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f  nd therefore sho
160d0 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78  uld not prompt x
160e0 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c  Savepoint()) cal
160f0 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a  lbacks..      **
16100 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72   If this is a tr
16110 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
16120 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  int being opened
16130 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  , it is guarante
16140 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74  ed.      ** that
16150 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73   the db->aVTrans
16160 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74  [] array is empt
16170 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  y.  */.      ass
16180 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  ert( db->autoCom
16190 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
161a0 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20  Trans==0 );.    
161b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
161c0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
161d0 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
161e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16200 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
16210 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b  db->nSavepoint);
16220 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
16230 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
16240 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16250 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  or;.#endif..    
16260 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
16270 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
16280 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
16290 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
162a0 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
162b0 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
162c0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
162d0 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
162e0 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
162f0 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
16300 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
16310 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
16320 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
16330 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
16340 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
16350 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
16360 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
16370 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
16380 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
16390 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
163a0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
163b0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
163c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
163d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
163e0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
163f0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16400 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
16410 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16420 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
16430 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
16440 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
16450 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
16460 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
16470 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
16480 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
16490 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
164a0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
164b0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
164c0 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
164d0 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
164e0 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
164f0 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
16500 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
16510 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
16520 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
16530 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
16540 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
16550 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
16560 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
16570 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
16580 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
16590 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
165a0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
165b0 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
165c0 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
165d0 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
165e0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
165f0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
16600 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
16610 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
16620 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
16630 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
16640 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
16650 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16660 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
16670 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
16680 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
16690 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
166a0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
166b0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
166c0 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61   db, "no such sa
166d0 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
166e0 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
166f0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
16700 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d     }else if( db-
16710 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26  >nVdbeWrite>0 &&
16720 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16730 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
16740 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
16750 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
16760 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
16770 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
16780 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
16790 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
167a0 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ents..      */. 
167b0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
167c0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
167d0 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
167e0 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
167f0 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
16800 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16810 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b  ogress".      );
16820 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
16830 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
16840 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
16850 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
16860 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
16870 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
16880 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
16890 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
168a0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
168b0 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
168c0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
168d0 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
168e0 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
168f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
16900 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
16910 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
16920 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
16930 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16940 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
16950 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
16960 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
16970 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
16980 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
16990 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
169a0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
169b0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
169c0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
169d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
169e0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
169f0 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
16a00 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
16a10 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
16a20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
16a30 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
16a40 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16a50 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
16a60 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
16a70 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
16a80 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
16a90 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
16aa0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
16ab0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
16ac0 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
16ad0 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
16ae0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16af0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
16b00 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
16b10 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
16b20 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
16b30 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
16b40 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
16b50 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
16b60 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
16b70 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
16b80 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
16b90 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
16ba0 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  pBt, SQLITE_ABOR
16bb0 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  T);.          }.
16bc0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16bd0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
16be0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
16bf0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
16c00 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
16c10 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
16c20 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
16c30 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
16c40 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16c50 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
16c60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16c70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
16c80 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
16c90 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
16ca0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
16cb0 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
16cc0 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
16cd0 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
16ce0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
16cf0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
16d00 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
16d10 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
16d20 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
16d30 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
16d40 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
16d50 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
16d60 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
16d70 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
16d80 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
16d90 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
16da0 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
16db0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
16dc0 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
16dd0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
16de0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
16df0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
16e00 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
16e10 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
16e20 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
16e30 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
16e40 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
16e50 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
16e60 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
16e70 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
16e80 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
16e90 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
16ea0 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
16eb0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
16ec0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
16ed0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
16ee0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
16ef0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
16f00 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
16f10 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
16f20 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
16f30 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
16f40 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
16f50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
16f60 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
16f70 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
16f80 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
16f90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
16fa0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
16fb0 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
16fc0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
16fd0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
16fe0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
16ff0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
17000 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
17010 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
17020 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
17030 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
17040 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
17050 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
17060 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
17070 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
17080 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
17090 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
170a0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
170b0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
170c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
170d0 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
170e0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
170f0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
17100 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
17110 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
17120 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
17130 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
17140 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
17150 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
17160 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
17170 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17180 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
17190 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  b, p1, iSavepoin
171a0 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
171b0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
171c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
171d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
171e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
171f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17200 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
17210 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
17220 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
17230 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
17240 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
17250 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
17260 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
17270 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
17280 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
17290 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
172a0 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
172b0 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
172c0 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
172d0 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
172e0 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
172f0 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
17300 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
17310 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
17320 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
17330 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
17340 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
17350 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
17360 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
17370 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
17380 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
17390 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
173a0 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69  t iRollback;.  i
173b0 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20  nt turnOnAC;..  
173c0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
173d0 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
173e0 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
173f0 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d  p2;.  turnOnAC =
17400 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17410 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43  it && !db->autoC
17420 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28  ommit;.  assert(
17430 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17440 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
17450 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
17460 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
17470 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17480 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
17490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
174a0 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
174b0 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
174c0 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
174d0 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
174e0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
174f0 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74  ;..#if 0.  if( t
17500 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c  urnOnAC && iRoll
17510 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
17520 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20  eActive>1 ){.   
17530 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
17540 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
17550 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
17560 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
17570 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
17580 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
17590 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
175a0 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
175b0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
175c0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
175d0 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
175e0 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
175f0 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
17600 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
17610 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
17620 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
17630 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
17640 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
17650 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17660 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
17670 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17680 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75  .#endif.  if( tu
17690 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
176a0 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
176b0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
176c0 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
176d0 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
176e0 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
176f0 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
17700 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
17710 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
17720 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
17730 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
17740 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
17750 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
17760 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
17770 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
17780 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
17790 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
177a0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
177b0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
177c0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
177d0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
177e0 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
177f0 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
17800 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
17810 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
17820 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
17830 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
17840 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
17850 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
17860 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
17870 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
17880 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17890 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
178a0 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
178b0 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
178c0 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
178d0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
178e0 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
178f0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
17900 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
17910 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
17920 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
17930 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
17940 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
17950 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
17960 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
17970 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
17980 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
17990 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
179a0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
179b0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
179c0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
179d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
179e0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
179f0 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
17a00 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
17a10 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
17a20 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
17a30 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17a40 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
17a50 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
17a60 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17a70 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
17a80 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17a90 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
17aa0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17ab0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17ac0 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
17ad0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
17ae0 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
17af0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
17b00 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
17b10 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
17b20 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
17b30 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
17b40 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
17b50 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
17b60 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
17b70 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
17b80 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
17b90 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
17ba0 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
17bb0 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
17bc0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17bd0 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
17be0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
17bf0 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
17c00 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61  nsaction on data
17c10 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61  base P1 if a tra
17c20 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
17c30 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76  already.** activ
17c40 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  e..** If P2 is n
17c50 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
17c60 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
17c70 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72  n is started, or
17c80 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74   if a .** read-t
17c90 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c  ransaction is al
17ca0 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74  ready active, it
17cb0 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20   is upgraded to 
17cc0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
17cd0 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ion..** If P2 is
17ce0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
17cf0 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
17d00 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  s started..**.**
17d10 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
17d20 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
17d30 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
17d40 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
17d50 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
17d60 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
17d70 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
17d80 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
17d90 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
17da0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
17db0 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
17dc0 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
17dd0 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
17de0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
17df0 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
17e00 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
17e10 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
17e20 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
17e30 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
17e40 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
17e50 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
17e60 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
17e70 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
17e80 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
17e90 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
17ea0 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
17eb0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
17ec0 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
17ed0 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
17ee0 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
17ef0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
17f00 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
17f10 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
17f20 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
17f30 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
17f40 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
17f50 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
17f60 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
17f70 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
17f80 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17f90 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
17fa0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
17fb0 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
17fc0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
17fd0 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
17fe0 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
17ff0 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
18000 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
18010 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
18020 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
18030 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
18040 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
18050 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
18060 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
18070 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
18080 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74   If P5!=0 then t
18090 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20  his opcode also 
180a0 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d  checks the schem
180b0 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74  a cookie against
180c0 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73   P3.** and the s
180d0 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
180e0 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74   counter against
180f0 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b   P4..** The cook
18100 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
18110 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
18120 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
18130 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
18140 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
18150 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
18160 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
18170 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
18180 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
18190 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
181a0 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
181b0 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20  the schema.  If 
181c0 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f  the schema.** co
181d0 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65  okie in P3 diffe
181e0 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65  rs from the sche
181f0 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65  ma cookie in the
18200 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
18210 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63   or.** if the sc
18220 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
18230 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69  counter in P4 di
18240 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63  ffers from the c
18250 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61  urrent.** genera
18260 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68  tion counter, th
18270 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  en an SQLITE_SCH
18280 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69  EMA error is rai
18290 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f  sed and executio
182a0 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65  n.** halts.  The
182b0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
182c0 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e  wrapper function
182d0 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72   might then repr
182e0 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61  epare the.** sta
182f0 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e  tement and rerun
18300 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67   it from the beg
18310 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20  inning..*/.case 
18320 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
18330 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
18340 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
18350 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65  nt iGen;..  asse
18360 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
18370 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
18380 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
18390 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
183a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
183b0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
183c0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
183d0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
183e0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
183f0 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f  >p1) );.  if( pO
18400 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c  p->p2 && (db->fl
18410 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65  ags & SQLITE_Que
18420 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20  ryOnly)!=0 ){.  
18430 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45    rc = SQLITE_RE
18440 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f  ADONLY;.    goto
18450 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
18460 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d  ror;.  }.  pBt =
18470 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18480 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
18490 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
184a0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
184b0 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
184c0 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
184d0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
184e0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
184f0 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
18500 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18510 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
18520 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
18530 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18540 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
18550 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18560 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
18570 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
18580 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
18590 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
185a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
185b0 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
185c0 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
185d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
185e0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
185f0 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
18600 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
18610 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
18620 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
18630 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
18640 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
18650 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
18660 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
18670 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
18680 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
18690 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
186a0 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
186b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
186c0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
186d0 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
186e0 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d  , p->iStatement-
186f0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  1);.      if( rc
18700 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
18710 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
18720 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
18730 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
18740 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ment);.      }..
18750 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74        /* Store t
18760 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
18770 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18780 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65   handles deferre
18790 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20  d constraint.   
187a0 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49     ** counter. I
187b0 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
187c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
187d0 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
187e0 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ack,.      ** th
187f0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  e value of this 
18800 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f  counter needs to
18810 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f   be restored too
18820 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e  .  */.      p->n
18830 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62  StmtDefCons = db
18840 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
18850 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
18860 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  efImmCons = db->
18870 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
18880 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
18890 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d  Gather the schem
188a0 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
188b0 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 2a 2f   for checking */
188c0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
188d0 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
188e0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
188f0 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
18900 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
18910 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
18920 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
18930 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
18940 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
18950 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
18960 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
18970 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18980 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
18990 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
189a0 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
189b0 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
189c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
189d0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
189e0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
189f0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
18a00 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
18a10 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
18a20 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
18a30 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
18a40 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
18a50 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
18a60 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
18a70 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
18a80 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
18a90 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
18aa0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
18ab0 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
18ac0 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
18ad0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
18ae0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
18af0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
18b00 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
18b10 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
18b20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
18b30 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
18b40 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
18b50 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
18b60 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
18b70 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
18b80 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
18b90 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
18ba0 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
18bb0 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
18bc0 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
18bd0 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
18be0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
18bf0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
18c00 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
18c10 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
18c20 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18c30 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
18c40 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
18c50 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
18c60 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
18c70 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
18c80 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
18c90 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
18ca0 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
18cb0 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
18cc0 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
18cd0 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
18ce0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
18cf0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
18d00 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
18d10 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
18d20 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
18d30 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
18d40 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
18d50 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
18d60 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
18d70 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
18d80 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
18d90 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
18da0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
18db0 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
18dc0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
18dd0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
18de0 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
18df0 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
18e00 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
18e10 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
18e20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
18e30 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
18e40 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
18e50 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
18e60 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
18e70 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
18e80 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
18e90 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
18ea0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
18eb0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
18ec0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
18ed0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
18ee0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
18ef0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
18f00 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
18f10 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
18f20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
18f30 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
18f40 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
18f50 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
18f60 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
18f70 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
18f80 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
18f90 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
18fa0 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
18fb0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
18fc0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
18fd0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
18fe0 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
18ff0 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
19000 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
19010 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69  bIsReader );.  i
19020 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
19030 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
19040 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
19050 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
19060 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
19070 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
19080 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
19090 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
190a0 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
190b0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
190c0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
190d0 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71  k, iDb) );..  sq
190e0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
190f0 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
19100 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
19110 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
19120 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
19130 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19140 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
19150 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19160 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
19170 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19180 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
19190 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
191a0 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
191b0 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
191c0 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
191d0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
191e0 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
191f0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
19200 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
19210 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
19220 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
19230 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
19240 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
19250 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
19260 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
19270 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
19280 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
19290 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
192a0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
192b0 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
192c0 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
192d0 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
192e0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
192f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
19300 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
19310 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
19320 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
19330 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
19340 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
19350 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19360 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
19370 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19380 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
19390 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
193a0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
193b0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
193c0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
193d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
193e0 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
193f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19400 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
19410 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
19420 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33  p1, 0) );.  pIn3
19430 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
19440 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
19450 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
19460 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
19470 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
19480 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
19490 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
194a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
194b0 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
194c0 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e  Bt, pOp->p2, (in
194d0 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  t)pIn3->u.i);.  
194e0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
194f0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
19500 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
19510 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
19520 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
19530 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
19540 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
19550 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
19560 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
19570 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
19580 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
19590 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
195a0 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
195b0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
195c0 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
195d0 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
195e0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
195f0 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
19600 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
19610 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
19620 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
19630 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
19640 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
19650 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
19660 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
19670 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
19680 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
19690 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
196a0 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
196b0 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
196c0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
196d0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
196e0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
196f0 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
19700 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
19710 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
19720 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
19730 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
19740 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
19750 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
19760 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
19770 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
19780 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
19790 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
197a0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
197b0 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
197c0 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
197d0 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
197e0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
197f0 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
19800 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
19810 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
19820 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
19830 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
19840 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
19850 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
19860 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
19870 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
19880 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
19890 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
198a0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
198b0 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
198c0 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
198d0 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
198e0 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
198f0 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
19900 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
19910 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
19920 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
19930 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
19940 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
19950 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
19960 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
19970 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
19980 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
19990 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
199a0 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
199b0 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
199c0 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
199d0 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
199e0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
199f0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
19a00 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
19a10 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
19a20 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
19a30 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
19a40 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
19a50 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
19a60 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
19a70 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
19a80 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
19a90 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
19aa0 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
19ab0 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
19ac0 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
19ad0 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
19ae0 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
19af0 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
19b00 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
19b10 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
19b20 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
19b30 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
19b40 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
19b50 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
19b60 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
19b70 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
19b80 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
19b90 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
19ba0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
19bb0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
19bc0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
19bd0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
19be0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
19bf0 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
19c00 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
19c10 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
19c20 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19c30 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19c40 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19c50 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19c60 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
19c70 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
19c80 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
19c90 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
19ca0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19cb0 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
19cc0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
19cd0 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
19ce0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
19cf0 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
19d00 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
19d10 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
19d20 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
19d30 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
19d40 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
19d50 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70  e ReadOpen excep
19d60 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a  t that it first.
19d70 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
19d80 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f   if the cursor o
19d90 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20  n P1 is already 
19da0 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74  open with a root
19db0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
19dc0 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20  of P2 and if it 
19dd0 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
19de0 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
19df0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
19e00 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
19e10 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
19e20 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
19e30 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
19e40 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
19e50 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
19e60 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20   with P5==0 and 
19e70 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a  with P4 being.**
19e80 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
19e90 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
19ea0 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
19eb0 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
19ec0 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74  e as.** every ot
19ed0 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
19ee0 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
19ef0 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75  e same cursor nu
19f00 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  mber..**.** See 
19f10 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63  the OpenRead opc
19f20 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ode documentatio
19f30 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
19f40 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
19f50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
19f60 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
19f70 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
19f80 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
19f90 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
19fa0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
19fb0 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
19fc0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
19fd0 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
19fe0 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
19ff0 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
1a000 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1a010 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
1a020 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
1a030 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1a040 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1a050 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1a060 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1a070 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1a080 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1a090 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1a0a0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1a0b0 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1a0c0 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1a0d0 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1a0e0 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1a0f0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1a100 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1a110 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1a120 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1a130 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1a140 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1a150 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1a160 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1a170 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1a180 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
1a190 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
1a1a0 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
1a1b0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
1a1c0 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
1a1d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1a1e0 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
1a1f0 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
1a200 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1a210 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1a220 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1a230 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
1a240 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
1a250 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
1a260 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
1a270 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
1a280 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
1a290 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
1a2a0 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
1a2b0 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
1a2c0 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  .case OP_ReopenI
1a2d0 64 78 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  dx: {.  VdbeCurs
1a2e0 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 61 73 73  or *pCur;..  ass
1a2f0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1a300 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a310 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1a320 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1a330 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1a340 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1a350 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1a360 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29  ==(u32)pOp->p2 )
1a370 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1a380 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33  ur->iDb==pOp->p3
1a390 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72   );      /* Guar
1a3a0 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f  anteed by the co
1a3b0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1a3c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
1a3d0 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
1a3e0 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  r is not current
1a3f0 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70  ly open or is op
1a400 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e  en on a differen
1a410 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68  t.  ** index, th
1a420 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
1a430 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64  into OP_OpenRead
1a440 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70   to force a reop
1a450 65 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f  en */.}.case OP_
1a460 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
1a470 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20  P_OpenWrite: {. 
1a480 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
1a490 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1a4a0 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
1a4b0 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
1a4c0 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
1a4d0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1a4e0 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
1a4f0 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70  ..  assert( (pOp
1a500 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49  ->p5&(OPFLAG_P2I
1a510 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b  SREG|OPFLAG_BULK
1a520 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29  CSR))==pOp->p5 )
1a530 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a540 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1a550 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
1a560 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a570 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1a580 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a590 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1a5a0 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ead || pOp->opco
1a5b0 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78  de==OP_ReopenIdx
1a5c0 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d  .          || p-
1a5d0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1a5e0 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
1a5f0 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
1a600 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20  LITE_ABORT;.    
1a610 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46  break;.  }..  nF
1a620 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
1a630 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
1a640 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
1a650 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
1a660 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1a670 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1a680 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1a690 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1a6a0 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d   iDb) );.  pDb =
1a6b0 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
1a6c0 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
1a6d0 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
1a6e0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
1a6f0 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1a700 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
1a710 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  g = 1;.    asser
1a720 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1a730 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
1a740 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
1a750 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1a760 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
1a770 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1a780 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
1a790 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1a7a0 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
1a7b0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
1a7c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1a7d0 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
1a7e0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
1a7f0 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  & OPFLAG_P2ISREG
1a800 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1a810 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
1a820 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  rt( p2<=(p->nMem
1a830 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
1a840 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1a850 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
1a860 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
1a870 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
1a880 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
1a890 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
1a8a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1a8b0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1a8c0 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
1a8d0 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
1a8e0 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
1a8f0 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
1a900 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
1a910 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1a920 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
1a930 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1a940 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
1a950 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
1a960 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
1a970 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
1a980 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
1a990 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
1a9a0 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
1a9b0 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
1a9c0 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
1a9d0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a9e0 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
1a9f0 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
1aa00 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
1aa10 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
1aa20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1aa30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1aa40 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
1aa50 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1aa60 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
1aa70 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1aa80 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65  eyInfo;.    asse
1aa90 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1aaa0 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1aab0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1aac0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1aad0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
1aae0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79  nfo->nField+pKey
1aaf0 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20  Info->nXField;. 
1ab00 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1ab10 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1ab20 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1ab30 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1ab40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ab50 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1ab60 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1ab70 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1ab80 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1ab90 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1aba0 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1abb0 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1abc0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1abd0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1abe0 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1abf0 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  1);.  if( pCur==
1ac00 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1ac10 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
1ac20 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
1ac30 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70  Ordered = 1;.  p
1ac40 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20  Cur->pgnoRoot = 
1ac50 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  p2;.  rc = sqlit
1ac60 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1ac70 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1ac80 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43  eyInfo, pCur->pC
1ac90 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1aca0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1acb0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  nfo;.  assert( O
1acc0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1acd0 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1ace0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1acf0 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d  ursorHints(pCur-
1ad00 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e  >pCursor, (pOp->
1ad10 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1ad20 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  CSR));..  /* Set
1ad30 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1ad40 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1ad50 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1ad60 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1ad70 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1ad80 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1ad90 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1ada0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1adb0 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1adc0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1add0 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1ade0 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1adf0 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1ae00 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1ae10 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1ae20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1ae30 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1ae40 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1ae50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ae60 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1ae70 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1ae80 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1ae90 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1aea0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1aeb0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1aec0 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1aed0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1aee0 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1aef0 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1af00 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1af10 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1af20 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1af30 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1af40 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1af50 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1af60 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1af70 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1af80 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1af90 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1afa0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1afb0 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1afc0 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1afd0 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1afe0 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1aff0 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1b000 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1b010 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1b020 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1b030 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1b040 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1b050 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1b060 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1b070 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1b080 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1b090 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1b0a0 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1b0b0 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1b0c0 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1b0d0 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1b0e0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1b0f0 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1b100 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1b110 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1b120 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1b130 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1b140 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1b150 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1b160 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1b170 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1b180 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1b190 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1b1a0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1b1b0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1b1c0 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1b1d0 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1b1e0 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1b1f0 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1b200 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1b210 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1b220 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1b230 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1b240 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1b250 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1b260 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1b270 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1b280 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1b290 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b2a0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1b2b0 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1b2c0 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1b2d0 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1b2e0 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1b2f0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1b300 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1b310 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b320 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1b330 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1b340 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1b350 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b360 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1b370 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b380 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1b390 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1b3a0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1b3b0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1b3c0 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1b3d0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1b3e0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1b3f0 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1b400 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1b410 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20  meral = 1;.  rc 
1b420 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1b430 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1b440 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b460 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1b470 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1b480 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1b490 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1b4a0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1b4b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1b4c0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1b4d0 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1b4e0 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1b4f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1b500 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1b510 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1b520 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1b530 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1b540 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1b550 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1b560 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1b570 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1b580 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1b590 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1b5a0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1b5b0 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1b5c0 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1b5d0 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1b5e0 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1b5f0 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1b600 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1b610 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1b620 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b630 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1b640 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1b650 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1b660 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b670 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1b680 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b690 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1b6a0 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1b6b0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1b6c0 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1b6d0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1b6e0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1b6f0 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1b700 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1b710 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b720 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1b730 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1b740 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1b750 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1b760 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1b770 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1b780 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b790 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1b7a0 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
1b7b0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70  pKeyInfo, pCx->p
1b7c0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1b7d0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1b7e0 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1b7f0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1b800 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1b810 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1b820 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1b830 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1b840 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1b850 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1b860 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1b870 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1b880 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1b890 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b8a0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1b8b0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1b8c0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1b8d0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1b8e0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1b8f0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1b900 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1b910 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1b920 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1b930 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1b940 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1b950 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1b960 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1b970 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72  thm..**.** If ar
1b980 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e  gument P3 is non
1b990 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69  -zero, then it i
1b9a0 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
1b9b0 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20  e sorter may.** 
1b9c0 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74  assume that a st
1b9d0 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64  able sort consid
1b9e0 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ering the first 
1b9f0 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63  P3 fields of eac
1ba00 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66  h.** key is suff
1ba10 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63  icient to produc
1ba20 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72  e the required r
1ba30 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20  esults..*/.case 
1ba40 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1ba50 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ba60 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1ba70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1ba80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1ba90 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1baa0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1bab0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1bac0 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1bad0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1bae0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1baf0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1bb00 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1bb10 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1bb20 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1bb30 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1bb40 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1bb50 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1bb60 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1bb70 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1bb80 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Cx);.  break;.}.
1bb90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1bba0 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a  enceTest P1 P2 *
1bbb0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1bbc0 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d  : if( cursor[P1]
1bbd0 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32  .ctr++ ) pc = P2
1bbe0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
1bbf0 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66  orter cursor. If
1bc00 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f   the sequence co
1bc10 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
1bc20 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a  ly zero, jump.**
1bc30 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65   to P2. Regardle
1bc40 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
1bc50 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
1bc60 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e   taken, incremen
1bc70 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71  t the.** the seq
1bc80 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a  uence value..*/.
1bc90 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1bca0 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  Test: {.  VdbeCu
1bcb0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
1bcc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1bcd0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1bce0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1bcf0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1bd00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1bd10 70 53 6f 72 74 65 72 20 29 3b 0a 20 20 69 66 28  pSorter );.  if(
1bd20 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b   (pC->seqCount++
1bd30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
1bd40 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1bd50 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1bd60 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
1bd70 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
1bd80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33  .** Synopsis: P3
1bd90 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32   columns in r[P2
1bda0 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ].**.** Open a n
1bdb0 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
1bdc0 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
1bdd0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
1bde0 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
1bdf0 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
1be00 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
1be10 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65  t one row is the
1be20 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
1be30 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
1be40 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
1be50 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
1be60 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
1be70 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
1be80 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
1be90 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
1bea0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
1beb0 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
1bec0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
1bed0 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
1bee0 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
1bef0 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
1bf00 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
1bf10 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
1bf20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
1bf30 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
1bf40 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
1bf50 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1bf60 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
1bf70 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
1bf80 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
1bf90 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
1bfa0 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
1bfb0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
1bfc0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
1bfd0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
1bfe0 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
1bff0 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
1c000 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
1c010 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1c020 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
1c030 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1c040 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1c050 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c060 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20  pOp->p3>=0 );.  
1c070 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1c080 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1c090 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29   pOp->p3, -1, 0)
1c0a0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1c0b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1c0c0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1c0d0 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54  ;.  pCx->pseudoT
1c0e0 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70  ableReg = pOp->p
1c0f0 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
1c100 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28  e = 1;.  assert(
1c110 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1c120 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c130 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1c140 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1c150 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1c160 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1c170 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1c180 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1c190 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1c1a0 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1c1b0 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1c1c0 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1c1d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c1e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c1f0 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1c200 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1c210 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1c220 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1c230 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1c240 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c250 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32  de: SeekGE P1 P2
1c260 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1c270 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1c280 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1c290 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1c2a0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1c2b0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1c2c0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1c2d0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1c2e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1c2f0 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1c300 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c310 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1c320 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1c330 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1c340 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1c350 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1c360 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1c370 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1c380 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1c390 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1c3a0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1c3b0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1c3c0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1c3d0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1c3e0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1c3f0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1c400 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1c410 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1c420 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1c430 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1c440 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1c450 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1c460 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1c470 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1c480 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1c490 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1c4a0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1c4b0 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1c4c0 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1c4d0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1c4e0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1c4f0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1c500 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1c510 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1c520 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1c530 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1c540 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1c550 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20  code: SeekGT P1 
1c560 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1c570 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1c580 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1c590 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1c5a0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1c5b0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1c5c0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1c5d0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1c5e0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1c5f0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1c600 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1c610 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1c620 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1c630 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1c640 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1c650 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1c660 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1c670 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1c680 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1c690 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1c6a0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1c6b0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1c6c0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1c6d0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1c6e0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c6f0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c700 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
1c710 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1c720 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1c730 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1c740 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1c750 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1c760 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1c770 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1c780 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1c790 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1c7a0 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1c7b0 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1c7c0 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1c7d0 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1c7e0 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1c7f0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1c800 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1c810 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1c820 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1c830 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1c840 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kLT P1 P2 P3 P4 
1c850 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
1c860 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1c870 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1c880 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1c890 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1c8a0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1c8b0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1c8c0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1c8d0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1c8e0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1c8f0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1c900 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1c910 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1c920 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1c930 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1c940 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1c950 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1c960 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1c970 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1c980 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1c990 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1c9a0 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1c9b0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1c9c0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1c9d0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1c9e0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1c9f0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1ca00 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1ca10 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1ca20 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1ca30 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1ca40 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1ca50 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
1ca60 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
1ca70 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
1ca80 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
1ca90 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
1caa0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1cab0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1cac0 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
1cad0 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Next..**.** Se
1cae0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1caf0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
1cb00 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1cb10 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1cb20 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  ekLE P1 P2 P3 P4
1cb30 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1cb40 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1cb50 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1cb60 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1cb70 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1cb80 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1cb90 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1cba0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1cbb0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1cbc0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1cbd0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1cbe0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1cbf0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1cc00 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1cc10 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1cc20 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1cc30 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1cc40 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1cc50 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1cc60 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
1cc70 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1cc80 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1cc90 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1cca0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1ccb0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1ccc0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1ccd0 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
1cce0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1ccf0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1cd00 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1cd10 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1cd20 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1cd30 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1cd40 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1cd50 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1cd60 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1cd70 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1cd80 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1cd90 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1cda0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1cdb0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1cdc0 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1cdd0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1cde0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1cdf0 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1ce00 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
1ce10 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20  P_SeekLT:       
1ce20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1ce30 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45  /.case OP_SeekLE
1ce40 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1ce50 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1ce60 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20  P_SeekGE:       
1ce70 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1ce80 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54  /.case OP_SeekGT
1ce90 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
1cea0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1ceb0 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20  res;.  int oc;. 
1cec0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1ced0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1cee0 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d r;.  int nFiel
1cef0 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  d;.  i64 iKey;  
1cf00 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
1cf10 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
1cf20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
1cf30 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1cf40 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1cf50 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1cf60 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
1cf70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1cf80 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1cf90 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1cfa0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1cfb0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
1cfc0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1cfd0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20   == OP_SeekLT+1 
1cfe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1cff0 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekGE == OP_See
1d000 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLT+2 );.  asser
1d010 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20  t( OP_SeekGT == 
1d020 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20  OP_SeekLT+3 );. 
1d030 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
1d040 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
1d050 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1d060 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70  =0 );.  oc = pOp
1d070 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e  ->opcode;.  pC->
1d080 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66  nullRow = 0;.#if
1d090 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1d0a0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
1d0b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
1d0c0 64 69 66 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  dif.  if( pC->is
1d0d0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1d0e0 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
1d0f0 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
1d100 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
1d110 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
1d120 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  g,.    ** blob, 
1d130 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
1d140 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
1d150 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
1d160 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20  e can do.    ** 
1d170 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e  the seek, so con
1d180 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1d190 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1d1a0 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28  ->p3];.    if( (
1d1b0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
1d1c0 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
1d1d0 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
1d1e0 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  tr ){.      appl
1d1f0 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
1d200 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d  (pIn3, 0);.    }
1d210 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69  .    iKey = sqli
1d220 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1d230 70 49 6e 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72  pIn3);.    pC->r
1d240 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1d250 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
1d260 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1d270 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1d280 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1d290 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c  without.    ** l
1d2a0 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
1d2b0 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
1d2c0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
1d2d0 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
1d2e0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1d2f0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
1d300 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
1d310 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1d320 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
1d330 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1d340 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
1d350 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1d360 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
1d370 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a  umber,.        *
1d380 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
1d390 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
1d3a0 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
1d3b0 2f 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70  /.        pc = p
1d3c0 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62  Op->p2 - 1;  Vdb
1d3d0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
1d3e0 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
1d3f0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1d400 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
1d410 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
1d420 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
1d430 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
1d440 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
1d450 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d  m, substitute >=
1d460 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72   for > and < for
1d470 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65   <=. e.g. if the
1d480 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20   search term.   
1d490 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64     ** is 4.9 and
1d4a0 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70   the integer app
1d4b0 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20  roximation 5:.  
1d4c0 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
1d4d0 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39         (x >  4.9
1d4e0 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e  )    ->     (x >
1d4f0 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 5).      **   
1d500 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20       (x <= 4.9) 
1d510 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20     ->     (x <  
1d520 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  5).      */.    
1d530 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c    if( pIn3->u.r<
1d540 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
1d550 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d560 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53  OP_SeekGE==(OP_S
1d570 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20  eekGT-1) );.    
1d580 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1d590 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLT==(OP_SeekL
1d5a0 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E-1) );.        
1d5b0 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
1d5c0 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LE & 0x0001)==(O
1d5d0 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
1d5e0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
1d5f0 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
1d600 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
1d610 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20  0001) ) oc--;.  
1d620 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1d630 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
1d640 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61  tion iKey is sma
1d650 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  ller than the ac
1d660 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1d670 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1d680 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f  substitute <= fo
1d690 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d  r < and > for >=
1d6a0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65  .  */.      else
1d6b0 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28   if( pIn3->u.r>(
1d6c0 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1d6d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1d6e0 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65  P_SeekLE==(OP_Se
1d6f0 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekLT+1) );.     
1d700 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1d710 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  ekGT==(OP_SeekGE
1d720 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
1d730 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1d740 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  T & 0x0001)==(OP
1d750 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31  _SeekGE & 0x0001
1d760 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1d770 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1d780 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1d790 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20  001) ) oc++;.   
1d7a0 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20     }.    } .    
1d7b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d7c0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1d7d0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1d7e0 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1d7f0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
1d800 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d810 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1d820 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1d830 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3d 3d   }.    if( res==
1d840 30 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 72  0 ){.      pC->r
1d850 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b  owidIsValid = 1;
1d860 0a 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52  .      pC->lastR
1d870 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20  owid = iKey;.   
1d880 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1d890 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1d8a0 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  .i;.    assert( 
1d8b0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1d8c0 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73  INT32 );.    ass
1d8d0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
1d8e0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1d8f0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1d900 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1d910 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
1d920 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e   /* The next lin
1d930 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74  e of code comput
1d940 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f  es as follows, o
1d950 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20  nly faster:.    
1d960 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
1d970 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGT || oc==OP
1d980 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a  _SeekLE ){.    *
1d990 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
1d9a0 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20  rc = -1;.    ** 
1d9b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20    }else{.    ** 
1d9c0 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
1d9d0 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = +1;.    **   
1d9e0 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64  }.    */.    r.d
1d9f0 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20  efault_rc = ((1 
1da00 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c  & (oc - OP_SeekL
1da10 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a  T)) ? -1 : +1);.
1da20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1da30 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64  OP_SeekGT || r.d
1da40 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
1da50 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1da60 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e  =OP_SeekLE || r.
1da70 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
1da80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1da90 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72  !=OP_SeekGE || r
1daa0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
1dab0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
1dac0 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c!=OP_SeekLT || 
1dad0 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
1dae0 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
1daf0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1db00 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1db10 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
1db20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
1db30 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
1db40 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1db50 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
1db60 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61  .#endif.    Expa
1db70 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1db80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1db90 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1dba0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1dbb0 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1dbc0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1dbd0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1dbe0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1dbf0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1dc00 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1dc10 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  alid = 0;.  }.  
1dc20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1dc30 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1dc40 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1dc50 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1dc60 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
1dc70 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1dc80 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69  nt++;.#endif.  i
1dc90 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45  f( oc>=OP_SeekGE
1dca0 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1dcb0 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63  =OP_SeekGE || oc
1dcc0 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20  ==OP_SeekGT );. 
1dcd0 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1dce0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1dcf0 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20  P_SeekGT) ){.   
1dd00 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1dd10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1dd20 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72  reeNext(pC->pCur
1dd30 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1dd40 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1dd50 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1dd60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1dd70 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1dd80 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1dd90 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
1dda0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
1ddb0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1ddc0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
1ddd0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
1dde0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
1ddf0 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1de00 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
1de10 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1de20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1de30 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1de40 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1de50 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1de60 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1de70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1de80 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e  rror;.      pC->
1de90 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1dea0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1deb0 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
1dec0 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
1ded0 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
1dee0 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
1def0 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
1df00 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
1df10 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
1df20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
1df30 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75  BtreeEof(pC->pCu
1df40 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
1df50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1df60 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72  p2>0 );.  VdbeBr
1df70 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
1df80 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
1df90 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1dfa0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1dfb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1dfc0 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20  e: Seek P1 P2 * 
1dfd0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1dfe0 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a    intkey=r[P2].*
1dff0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
1e000 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  en table cursor 
1e010 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69  and P2 is a rowi
1e020 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61  d integer.  Arra
1e030 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f  nge.** for P1 to
1e040 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74   move so that it
1e050 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72   points to the r
1e060 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32  owid given by P2
1e070 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
1e080 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72  actually a defer
1e090 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
1e0a0 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
1e0b0 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
1e0c0 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
1e0d0 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
1e0e0 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
1e0f0 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
1e100 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
1e110 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
1e120 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20  /.case OP_Seek: 
1e130 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20  {    /* in2 */. 
1e140 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e150 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e160 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e170 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e180 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1e190 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1e1a0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1e1b0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1e1c0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
1e1d0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1e1e0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1e1f0 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  = 0;.  pIn2 = &a
1e200 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1e210 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
1e220 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
1e230 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
1e240 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e250 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65   = 0;.  pC->defe
1e260 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1e270 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f    break;.}.  ../
1e280 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
1e290 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e2a0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1e2b0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1e2c0 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1e2d0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1e2e0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1e2f0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1e300 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1e310 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1e320 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1e330 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1e340 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1e350 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
1e360 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1e370 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1e380 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1e390 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1e3a0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
1e3b0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1e3c0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1e3d0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1e3e0 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
1e3f0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1e400 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
1e410 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
1e420 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1e430 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1e440 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1e450 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
1e460 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
1e470 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
1e480 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
1e490 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
1e4a0 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
1e4b0 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
1e4c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e4d0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
1e4e0 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
1e4f0 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
1e500 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
1e510 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1e520 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1e530 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1e540 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1e550 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1e560 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1e570 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1e580 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1e590 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1e5a0 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1e5b0 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1e5c0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1e5d0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1e5e0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1e5f0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1e600 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1e610 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1e620 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
1e630 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
1e640 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1e650 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1e660 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
1e670 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
1e680 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
1e690 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
1e6a0 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
1e6b0 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
1e6c0 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
1e6d0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1e6e0 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
1e6f0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1e700 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
1e710 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1e720 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
1e730 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1e740 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1e750 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
1e760 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
1e770 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
1e780 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e790 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
1e7a0 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
1e7b0 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
1e7c0 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
1e7d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e7e0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1e7f0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
1e800 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
1e810 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
1e820 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e830 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1e840 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1e850 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1e860 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1e870 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1e880 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1e890 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1e8a0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1e8b0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1e8c0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1e8d0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1e8e0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1e8f0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1e900 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1e910 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1e920 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1e930 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e  * contains any N
1e940 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  ULL value, jump 
1e950 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1e960 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73  2.  If all terms
1e970 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
1e980 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74  d are not-NULL t
1e990 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64  hen a check is d
1e9a0 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  one to determine
1e9b0 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74   if any row in t
1e9c0 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62  he.** P1 index b
1e9d0 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68  tree has a match
1e9e0 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20  ing key prefix. 
1e9f0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ea00 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a   matches, jump.*
1ea10 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
1ea20 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69   P2.  If there i
1ea30 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20  s a match, fall 
1ea40 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76  through and leav
1ea50 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73  e the P1.** curs
1ea60 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
1ea70 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e  he matching row.
1ea80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1ea90 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  de is similar to
1eaa0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74   OP_NotFound wit
1eab0 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  h the exceptions
1eac0 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61   that the.** bra
1ead0 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61  nch is always ta
1eae0 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20  ken if any part 
1eaf0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65  of the search ke
1eb00 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  y input is NULL.
1eb10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1eb20 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1eb30 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
1eb40 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
1eb50 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
1eb60 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
1eb70 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
1eb80 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
1eb90 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
1eba0 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
1ebb0 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
1ebc0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
1ebd0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1ebe0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1ebf0 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
1ec00 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
1ec10 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1ec20 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
1ec30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1ec40 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
1ec50 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1ec60 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1ec70 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
1ec80 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
1ec90 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1eca0 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
1ecb0 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
1ecc0 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1ecd0 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1ece0 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1ecf0 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1ed00 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1ed10 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1ed20 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*4 + 7];..#if
1ed30 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1ed40 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1ed50 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
1ed60 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
1ed70 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1ed80 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1ed90 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1eda0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1edb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1edc0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1edd0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ede0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1edf0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ee00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1ee10 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1ee20 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1ee30 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
1ee40 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1ee50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1ee60 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1ee70 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1ee80 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20  e==0 );.  pFree 
1ee90 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
1eea0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
1eeb0 74 6f 20 73 75 70 70 72 65 73 73 20 61 20 63 6f  to suppress a co
1eec0 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
1eed0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
1eee0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b  .i>0 ){.    r.pK
1eef0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1ef00 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1ef10 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1ef20 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  p4.i;.    r.aMem
1ef30 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72   = pIn3;.    for
1ef40 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1ef50 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1ef60 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1ef70 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lid(&r.aMem[ii])
1ef80 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64   );.      Expand
1ef90 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d  Blob(&r.aMem[ii]
1efa0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1efb0 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28  _DEBUG.      if(
1efc0 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54   ii ) REGISTER_T
1efd0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c  RACE(pOp->p3+ii,
1efe0 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23   &r.aMem[ii]);.#
1eff0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20  endif.    }.    
1f000 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1f010 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b  }else{.    pIdxK
1f020 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1f030 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1f040 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d  ord(.        pC-
1f050 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70  >pKeyInfo, aTemp
1f060 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1f070 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20  pRec), &pFree.  
1f080 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20 70 49    ); .    if( pI
1f090 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20  dxKey==0 ) goto 
1f0a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
1f0b0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1f0c0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1f0d0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1f0e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
1f0f0 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72  o)==0 );  /* zer
1f100 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65  oblobs already e
1f110 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 73  xpanded */.    s
1f120 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1f130 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
1f140 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
1f150 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
1f160 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e  .  }.  pIdxKey->
1f170 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
1f180 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f190 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e==OP_NoConflict
1f1a0 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74   ){.    /* For t
1f1b0 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  he OP_NoConflict
1f1c0 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68   opcode, take th
1f1d0 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66  e jump if any of
1f1e0 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75   the.    ** inpu
1f1f0 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c  t fields are NUL
1f200 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79  L, since any key
1f210 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c   with a NULL wil
1f220 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e  l not.    ** con
1f230 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72  flict */.    for
1f240 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1f250 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1f260 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e   if( r.aMem[ii].
1f270 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1f280 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d   ){.        pc =
1f290 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 56 64   pOp->p2 - 1; Vd
1f2a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1f2b0 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  2);.        brea
1f2c0 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
1f2d0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
1f2e0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1f2f0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1f300 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
1f310 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
1f320 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a  pOp->p4.i==0 ){.
1f330 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1f340 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
1f350 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
1f360 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65  TE_OK ){.    bre
1f370 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65  ak;.  }.  pC->se
1f380 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
1f390 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1f3a0 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43  = (res==0);.  pC
1f3b0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
1f3c0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70  readyExists;.  p
1f3d0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1f3e0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1f3f0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1f400 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
1f410 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
1f420 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42  und ){.    VdbeB
1f430 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61  ranchTaken(alrea
1f440 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  dyExists!=0,2);.
1f450 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1f460 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1f470 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1f480 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
1f490 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
1f4a0 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20  ists==0,2);.    
1f4b0 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
1f4c0 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1f4d0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1f4e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1f4f0 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
1f500 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1f510 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
1f520 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
1f530 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
1f540 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
1f550 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
1f560 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
1f570 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61   keys).  P3 is a
1f580 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  n integer rowid.
1f590 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74    If P1 does not
1f5a0 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
1f5b0 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20  d with.** rowid 
1f5c0 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
1f5d0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1f5e0 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
1f5f0 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20  ain a record.** 
1f600 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
1f610 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  en leave the cur
1f620 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
1f630 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
1f640 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20  fall.** through 
1f650 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1f660 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
1f670 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
1f680 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
1f690 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
1f6a0 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
1f6b0 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
1f6c0 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
1f6d0 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
1f6e0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1f6f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1f700 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1f710 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
1f720 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
1f730 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
1f740 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f750 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
1f760 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
1f770 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
1f780 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
1f790 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1f7a0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
1f7b0 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73  oConflict.*/.cas
1f7c0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
1f7d0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1f7e0 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
1f7f0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1f800 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1f810 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
1f820 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
1f830 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1f840 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1f850 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1f860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1f870 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f880 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f890 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1f8a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1f8b0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
1f8c0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1f8d0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
1f8e0 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  0;.#endif.  asse
1f8f0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1f900 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f910 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1f920 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1f930 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
1f940 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
1f950 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
1f960 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
1f970 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1f980 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1f990 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b  ked(pCrsr, 0, iK
1f9a0 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1f9b0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1f9c0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 70 43 2d  pIn3->u.i;.  pC-
1f9d0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1f9e0 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 70  res==0 ?1:0;.  p
1f9f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1fa00 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1fa10 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1fa20 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1fa30 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62  oveto = 0;.  Vdb
1fa40 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
1fa50 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
1fa60 73 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  s!=0 ){.    pc =
1fa70 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1fa80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1fa90 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b  widIsValid==0 );
1faa0 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
1fab0 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62  esult = res;.  b
1fac0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1fad0 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20  de: Sequence P1 
1fae0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1faf0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73  psis: r[P2]=curs
1fb00 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a  or[P1].ctr++.**.
1fb10 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
1fb20 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
1fb30 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
1fb40 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
1fb50 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
1fb60 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
1fb70 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
1fb80 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1fb90 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
1fba0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
1fbb0 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
1fbc0 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
1fbd0 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
1fbe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1fbf0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1fc00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fc10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1fc20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fc30 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1fc40 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
1fc50 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
1fc60 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1fc70 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
1fc80 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1fc90 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1fca0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
1fcb0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
1fcc0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
1fcd0 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1fce0 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1fcf0 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1fd00 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1fd10 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1fd20 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1fd30 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1fd40 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1fd50 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1fd60 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1fd70 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1fd80 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1fd90 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1fda0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1fdb0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1fdc0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1fdd0 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1fde0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1fdf0 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1fe00 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1fe10 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1fe20 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1fe30 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1fe40 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1fe50 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1fe60 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1fe70 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1fe80 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1fe90 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1fea0 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
1feb0 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
1fec0 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
1fed0 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1fee0 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
1fef0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
1ff00 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
1ff10 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
1ff20 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
1ff30 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
1ff40 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
1ff50 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
1ff60 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
1ff70 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1ff80 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1ff90 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
1ffa0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
1ffb0 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
1ffc0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1ffd0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
1ffe0 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
1fff0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
20000 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
20010 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
20020 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
20030 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
20040 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
20050 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
20060 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
20070 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
20080 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
20090 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
200a0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
200b0 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
200c0 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
200d0 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
200e0 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
200f0 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
20100 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
20110 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
20120 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20130 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20140 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
20150 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20160 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
20170 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56  !=0 );.  if( NEV
20180 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d  ER(pC->pCursor==
20190 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  0) ){.    /* The
201a0 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
201b0 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
201c0 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
201d0 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
201e0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
201f0 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
20200 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
20210 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
20220 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
20230 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
20240 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
20250 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
20260 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
20270 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
20280 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
20290 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
202a0 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
202b0 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
202c0 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
202d0 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
202e0 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
202f0 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
20300 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
20310 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
20320 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
20330 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
20340 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
20350 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
20360 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
20370 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
20380 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
20390 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
203a0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
203b0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
203c0 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
203d0 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
203e0 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
203f0 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
20400 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
20410 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
20420 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
20430 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
20440 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
20450 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
20460 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23  C->isTable );..#
20470 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
20480 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
20490 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
204a0 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
204b0 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
204c0 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
204d0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
204e0 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
204f0 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
20500 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
20510 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
20520 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
20530 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
20540 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
20550 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
20560 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
20570 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
20580 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
20590 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
205a0 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
205b0 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
205c0 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
205d0 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
205e0 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
205f0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
20600 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  d ){.      rc = 
20610 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
20620 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
20630 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
20640 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20650 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
20660 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20670 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
20680 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
20690 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
206a0 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
206b0 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
206c0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
206d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
206e0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70  sorIsValid(pC->p
206f0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
20700 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20710 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
20720 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
20730 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
20740 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
20750 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
20760 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
20770 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
20780 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
20790 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
207a0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
207b0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
207c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
207d0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
207e0 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
207f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20800 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
20810 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
20820 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
20830 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
20840 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
20850 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
20860 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
20870 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
20880 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
20890 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
208a0 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
208b0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
208c0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
208d0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
208e0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
208f0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
20900 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
20910 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
20920 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20930 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
20940 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
20950 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
20960 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
20970 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20980 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
20990 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
209a0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
209b0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
209c0 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
209d0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
209e0 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
209f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
20a00 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
20a10 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
20a20 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  em);.      }.   
20a30 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
20a40 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a  Valid(pMem) );..
20a50 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
20a60 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d  RACE(pOp->p3, pM
20a70 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  em);.      sqlit
20a80 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
20a90 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
20aa0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
20ab0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
20ac0 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
20ad0 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
20ae0 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ger */.      if(
20af0 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
20b00 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
20b10 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
20b20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
20b30 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
20b40 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38  P: R-12275-61338
20b50 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
20b60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20b70 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
20b80 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75     if( v<pMem->u
20b90 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20  .i+1 ){.        
20ba0 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20  v = pMem->u.i + 
20bb0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
20bc0 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pMem->u.i = v;.
20bd0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
20be0 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64   if( pC->useRand
20bf0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
20c00 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   /* IMPLEMENTATI
20c10 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34  ON-OF: R-07677-4
20c20 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67  1881 If the larg
20c30 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75  est ROWID is equ
20c40 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20  al to the.      
20c50 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  ** largest possi
20c60 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32  ble integer (922
20c70 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
20c80 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  ) then the datab
20c90 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67  ase.      ** eng
20ca0 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69  ine starts picki
20cb0 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64  ng positive cand
20cc0 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20  idate ROWIDs at 
20cd0 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20  random until.   
20ce0 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f     ** it finds o
20cf0 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70  ne that is not p
20d00 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20  reviously used. 
20d10 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
20d20 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
20d30 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20  /* We cannot be 
20d40 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  in random rowid 
20d50 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a  mode if this is.
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
20d80 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
20d90 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20   table. */.     
20da0 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
20db0 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  do{.        sqli
20dc0 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
20dd0 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
20de0 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
20df0 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b  _ROWID>>1); v++;
20e00 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74    /* Ensure that
20e10 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74 68   v is greater th
20e20 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  an zero */.     
20e30 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d   }while(  ((rc =
20e40 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
20e50 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
20e60 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
20e70 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  )v,.            
20e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ea0 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d       0, &res))==
20eb0 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20  SQLITE_OK).     
20ec0 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d         && (res==
20ed0 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  0).            &
20ee0 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a  & (++cnt<100));.
20ef0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
20f00 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
20f10 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
20f20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
20f30 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
20f40 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
20f50 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20f60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20f70 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
20f80 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
20f90 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
20fa0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
20fb0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
20fc0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
20fd0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
20fe0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
20ff0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21000 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
21010 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
21020 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
21030 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
21040 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
21050 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61  ntkey=r[P3] data
21060 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69  =r[P2].**.** Wri
21070 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
21080 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
21090 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
210a0 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
210b0 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
210c0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
210d0 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
210e0 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
210f0 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
21100 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
21110 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
21120 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
21130 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
21140 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
21150 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
21160 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
21170 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
21180 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
21190 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
211a0 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
211b0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
211c0 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
211d0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
211e0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
211f0 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
21200 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
21210 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
21220 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
21230 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
21240 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
21250 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
21260 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
21270 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
21280 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
21290 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
212a0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
212b0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
212c0 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
212d0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
212e0 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
212f0 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
21300 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
21310 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
21320 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
21330 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
21340 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
21350 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
21360 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
21370 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
21380 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
21390 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
213a0 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
213b0 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
213c0 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
213d0 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
213e0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
213f0 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
21400 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
21410 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
21420 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
21430 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
21440 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
21450 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
21460 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
21470 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
21480 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
21490 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
214a0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
214b0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
214c0 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
214d0 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
214e0 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
214f0 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
21500 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
21510 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
21520 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
21530 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
21540 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
21550 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
21560 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
21570 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
21580 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63  to a Table struc
21590 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20  ture, or may be 
215a0 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a  NULL. If it is .
215b0 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  ** not NULL, the
215c0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
215d0 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  k (sqlite3.xUpda
215e0 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
215f0 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f  nvoked .** follo
21600 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
21610 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
21620 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
21630 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
21640 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
21650 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
21660 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
21670 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
21680 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
21690 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
216a0 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
216b0 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
216c0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
216d0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
216e0 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
216f0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
21700 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
21710 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
21720 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
21730 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
21740 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
21750 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
21760 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
21770 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
21780 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
21790 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
217a0 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
217b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
217c0 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
217d0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
217e0 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74  :  intkey=P3 dat
217f0 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  a=r[P2].**.** Th
21800 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
21810 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
21820 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
21830 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
21840 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
21850 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
21860 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
21870 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
21880 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
21890 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
218a0 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
218b0 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
218c0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
218d0 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
218e0 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
218f0 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
21900 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
21910 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
21920 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
21930 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
21940 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  iKey;         /*
21950 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
21960 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
21970 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
21980 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62  nserted */.  Vdb
21990 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
219a0 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
219b0 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
219c0 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
219d0 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
219e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
219f0 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f  of zero-bytes to
21a00 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74   append */.  int
21a10 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
21a20 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
21a30 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
21a40 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
21a50 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
21a60 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
21a70 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
21a80 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
21a90 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c  e hook */.  Tabl
21aa0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
21ab0 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
21ac0 20 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74   - used by updat
21ad0 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65  e and pre-update
21ae0 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20   hooks */.  int 
21af0 6f 70 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  op = 0;       /*
21b00 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
21b10 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
21b20 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
21b30 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
21b40 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
21b50 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
21b60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21b70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21b80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
21b90 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
21ba0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21bb0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21bc0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21bd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
21be0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
21bf0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
21c00 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
21c10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
21c20 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
21c30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
21c40 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e  4_TABLE || pOp->
21c50 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49  p4type>=P4_STATI
21c60 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  C );.  REGISTER_
21c70 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
21c80 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f  Data);..  if( pO
21c90 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
21ca0 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79  sert ){.    pKey
21cb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
21cc0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
21cd0 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Key->flags & MEM
21ce0 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65  _Int );.    asse
21cf0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
21d00 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49  Key) );.    REGI
21d10 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
21d20 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69  p3, pKey);.    i
21d30 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
21d40 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
21d50 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
21d60 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20  e==OP_InsertInt 
21d70 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f  );.    iKey = pO
21d80 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
21d90 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
21da0 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
21db0 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
21dc0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
21dd0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
21de0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
21df0 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  >=0 );.    zDb =
21e00 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
21e10 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  ].zName;.    pTa
21e20 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
21e30 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
21e40 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
21e50 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
21e60 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
21e70 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 0a 0a 23  _INSERT);.  }..#
21e80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
21e90 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
21ea0 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
21eb0 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  he pre-update ho
21ec0 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ok, if any */.  
21ed0 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
21ee0 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20 20 26  teCallback .   &
21ef0 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  & pOp->p4type==P
21f00 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20 28 21  4_TABLE.   && (!
21f10 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
21f20 47 5f 49 53 55 50 44 41 54 45 29 20 7c 7c 20 70  G_ISUPDATE) || p
21f30 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
21f40 3d 30 29 0a 20 20 20 26 26 20 48 61 73 52 6f 77  =0).   && HasRow
21f50 69 64 28 70 54 61 62 29 0a 20 20 29 7b 0a 20 20  id(pTab).  ){.  
21f60 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
21f70 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
21f80 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  , SQLITE_INSERT,
21f90 20 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65 79   zDb, pTab, iKey
21fa0 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a  , pOp->p2);.  }.
21fb0 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f  #endif..  if( pO
21fc0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
21fd0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
21fe0 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
21ff0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
22000 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
22010 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
22020 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66  wid = iKey;.  if
22030 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
22040 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
22050 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20   pData->z = 0;. 
22060 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b     pData->n = 0;
22070 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
22080 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
22090 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
220a0 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20  EM_Str) );.  }. 
220b0 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
220c0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
220d0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
220e0 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
220f0 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
22100 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
22110 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72  Zero ){.    nZer
22120 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65  o = pData->u.nZe
22130 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ro;.  }else{.   
22140 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a   nZero = 0;.  }.
22150 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
22160 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43  reeInsert(pC->pC
22170 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a  ursor, 0, iKey,.
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22190 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d            pData-
221a0 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a  >z, pData->n, nZ
221b0 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ero,.           
221c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
221d0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
221e0 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65 65  _APPEND)!=0, see
221f0 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70  kResult.  );.  p
22200 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
22210 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  = 0;.  pC->defer
22220 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
22230 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
22240 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
22250 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
22260 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
22270 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
22280 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
22290 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
222a0 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20 26 26  allback && op &&
222b0 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
222c0 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  ){.    db->xUpda
222d0 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
222e0 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a  UpdateArg, op, z
222f0 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
22300 20 69 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72   iKey);.  }.  br
22310 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22320 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20  e: Delete P1 P2 
22330 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  P3 P4 *.**.** De
22340 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
22350 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
22360 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
22370 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
22380 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77  .** The cursor w
22390 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
223a0 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74  ting at either t
223b0 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70  he next or the p
223c0 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72  revious.** recor
223d0 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
223e0 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f  If it is left po
223f0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65  inting at the ne
22400 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a  xt record, then.
22410 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74  ** the next Next
22420 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
22430 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48  l be a no-op.  H
22440 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f  ence it is OK to
22450 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63   delete.** a rec
22460 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
22470 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a  a Next loop..**.
22480 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
22490 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
224a0 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P2 is set, then
224b0 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
224c0 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
224d0 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
224e0 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
224f0 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
22500 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
22510 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
22520 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
22530 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
22540 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
22550 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f   NULL then it po
22560 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20  ints to a Table 
22570 73 74 72 75 74 75 72 65 2e 20 49 6e 20 74 68 69  struture. In thi
22580 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a  s case either .*
22590 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20  * the update or 
225a0 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
225b0 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65   or both, may be
225c0 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31   invoked. The P1
225d0 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20   cursor must.** 
225e0 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
225f0 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  oned using OP_No
22600 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
22610 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
22620 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73  code in .** this
22630 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61   case. Specifica
22640 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63  lly, if one is c
22650 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70  onfigured, the p
22660 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69  re-update hook i
22670 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66  s .** invoked if
22680 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P4 is not NULL.
22690 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   The update-hook
226a0 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f   is invoked if o
226b0 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  ne is configured
226c0 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20  , .** P4 is not 
226d0 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50  NULL, and the OP
226e0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
226f0 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a  g is set in P2..
22700 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22710 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
22720 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20  g is set in P2, 
22730 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73  then P3 contains
22740 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20   the address.** 
22750 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
22760 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
22770 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
22780 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
22790 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20   row will.** be 
227a0 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70  set to by the up
227b0 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
227c0 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34  _Delete: {.  i64
227d0 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72   iKey;.  VdbeCur
227e0 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74  sor *pC;.  const
227f0 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61   char *zDb;.  Ta
22800 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74  ble *pTab;.  int
22810 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66   opflags;..  opf
22820 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  lags = pOp->p2;.
22830 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22840 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22850 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22860 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22870 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22880 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22890 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
228a0 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20  !=0 );  /* Only 
228b0 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74  valid for real t
228c0 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f  ables, no pseudo
228d0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 69 4b 65 79  tables */.  iKey
228e0 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
228f0 3b 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 75  ;      /* Only u
22900 73 65 64 20 66 6f 72 20 74 68 65 20 75 70 64 61  sed for the upda
22910 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a 20 20 2f 2a  te hook */..  /*
22920 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f   The OP_Delete o
22930 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c  pcode always fol
22940 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78  lows an OP_NotEx
22950 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20  ists or OP_Last 
22960 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d  or.  ** OP_Colum
22970 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61  n on the same ta
22980 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20  ble without any 
22990 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72  intervening oper
229a0 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a  ations that.  **
229b0 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69   might move or i
229c0 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
229d0 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72  rsor.  Hence cur
229e0 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73  sor pC is always
229f0 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74   pointing.  ** t
22a00 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  o the row to be 
22a10 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
22a20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
22a30 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74  rMoveto() operat
22a40 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69  ion.  ** below i
22a50 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70  s always a no-op
22a60 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c   and cannot fail
22a70 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69  .  We will run i
22a80 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68  t anyhow, though
22a90 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20  ,.  ** to guard 
22aa0 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63  against future c
22ab0 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f  hanges to the co
22ac0 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20  de generator..  
22ad0 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43  **/.  assert( pC
22ae0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22af0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
22b00 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22b10 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
22b20 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
22b30 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
22b40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22b50 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
22b60 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65  date-hook or pre
22b70 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c  -update-hook wil
22b80 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
22b90 74 20 69 4b 65 79 20 74 6f 20 0a 20 20 2a 2a 20  t iKey to .  ** 
22ba0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
22bb0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
22bc0 65 64 2e 20 53 65 74 20 7a 44 62 20 61 6e 64 20  ed. Set zDb and 
22bd0 7a 54 61 62 20 61 73 20 77 65 6c 6c 2e 0a 20 20  zTab as well..  
22be0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
22bf0 2e 7a 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  .z && HAS_UPDATE
22c00 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
22c10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
22c20 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
22c30 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
22c40 6c 69 64 20 7c 7c 20 21 48 61 73 52 6f 77 69 64  lid || !HasRowid
22c50 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 29  (pOp->p4.pTab) )
22c60 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d  ;.    iKey = pC-
22c70 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20  >lastRowid;.    
22c80 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
22c90 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
22ca0 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34    pTab = pOp->p4
22cb0 2e 70 54 61 62 3b 0a 20 7d 0a 0a 23 69 66 64 65  .pTab;. }..#ifde
22cc0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
22cd0 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
22ce0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
22cf0 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  re-update-hook i
22d00 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
22d10 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64   if( db->xPreUpd
22d20 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
22d30 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48 61 73 52  Op->p4.z && HasR
22d40 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
22d50 20 20 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c    assert( !(opfl
22d60 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  ags & OPFLAG_ISU
22d70 50 44 41 54 45 29 20 7c 7c 20 28 61 4d 65 6d 5b  PDATE) || (aMem[
22d80 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26  pOp->p3].flags &
22d90 20 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a 20 20 20   MEM_Int) );.   
22da0 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
22db0 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
22dc0 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61 67  .        (opflag
22dd0 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  s & OPFLAG_ISUPD
22de0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
22df0 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44 45  DATE : SQLITE_DE
22e00 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20 7a  LETE, .        z
22e10 44 62 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 0a  Db, pTab, iKey,.
22e20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a          pOp->p3.
22e30 20 20 20 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69      );.  }.#endi
22e40 66 0a 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73  f..  if( opflags
22e50 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
22e60 20 29 20 62 72 65 61 6b 3b 0a 0a 20 20 72 63 20   ) break;..  rc 
22e70 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
22e80 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  lete(pC->pCursor
22e90 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
22ea0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
22eb0 4c 45 3b 0a 0a 20 20 2f 2a 20 55 70 64 61 74 65  LE;..  /* Update
22ec0 20 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e   the change-coun
22ed0 74 65 72 20 61 6e 64 20 69 6e 76 6f 6b 65 20 74  ter and invoke t
22ee0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
22ef0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
22f00 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f   if( opflags & O
22f10 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b  PFLAG_NCHANGE ){
22f20 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  .    p->nChange+
22f30 2b 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  +;.    assert( p
22f40 4f 70 2d 3e 70 34 2e 7a 20 29 3b 0a 20 20 20 20  Op->p4.z );.    
22f50 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
22f60 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
22f70 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
22f80 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
22f90 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
22fa0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
22fb0 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
22fc0 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
22fd0 2d 3e 7a 4e 61 6d 65 2c 69 4b 65 79 29 3b 0a 20  ->zName,iKey);. 
22fe0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
22ff0 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  ;.}./* Opcode: R
23000 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20  esetCount * * * 
23010 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  * *.**.** The va
23020 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
23030 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
23040 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
23050 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
23060 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
23070 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
23080 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
23090 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
230a0 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d  ..** Then the VM
230b0 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
230c0 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73  e counter resets
230d0 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69   to 0..** This i
230e0 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
230f0 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
23100 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
23110 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  t: {.  sqlite3Vd
23120 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
23130 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
23140 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
23150 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23160 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d  pcode: SorterCom
23170 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
23180 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
23190 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28  f key(P1)!=trim(
231a0 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50  r[P3],P4) goto P
231b0 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
231c0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
231d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
231e0 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69  compares a prefi
231f0 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  x of the.** reco
23200 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  rd blob in regis
23210 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61  ter P3 against a
23220 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65   prefix of the e
23230 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68  ntry that .** th
23240 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  e sorter cursor 
23250 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73  currently points
23260 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66   to.  Only the f
23270 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a  irst P4 fields.*
23280 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74  * of r[P3] and t
23290 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64  he sorter record
232a0 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a   are compared..*
232b0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
232c0 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20  3 or the sorter 
232d0 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20  contains a NULL 
232e0 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20  in one of their 
232f0 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66  significant.** f
23300 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74  ields (not count
23310 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64  ing the P4 field
23320 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69  s at the end whi
23330 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20  ch are ignored) 
23340 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  then.** the comp
23350 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65  arison is assume
23360 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a  d to be equal..*
23370 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67  *.** Fall throug
23380 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75  h to next instru
23390 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f  ction if the two
233a0 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65   records compare
233b0 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63   equal to.** eac
233c0 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74  h other.  Jump t
233d0 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65  o P2 if they are
233e0 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63   different..*/.c
233f0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d  ase OP_SorterCom
23400 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  pare: {.  VdbeCu
23410 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
23420 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43  res;.  int nKeyC
23430 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ol;..  pC = p->a
23440 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23450 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
23460 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72  r(pC) );.  asser
23470 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
23480 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49  P4_INT32 );.  pI
23490 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
234a0 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d  p3];.  nKeyCol =
234b0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65   pOp->p4.i;.  re
234c0 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  s = 0;.  rc = sq
234d0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
234e0 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
234f0 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b   nKeyCol, &res);
23500 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
23510 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
23520 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
23530 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
23540 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a   }.  break;.};..
23550 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
23560 72 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  rData P1 P2 * * 
23570 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
23580 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
23590 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
235a0 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
235b0 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
235c0 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
235d0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
235e0 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
235f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23600 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
23610 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
23620 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23630 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
23640 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
23650 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
23660 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
23670 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74   pOut);.  assert
23680 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
23690 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20  || (pOut->flags 
236a0 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  & MEM_Blob) );. 
236b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
236c0 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31  code: RowData P1
236d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
236e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
236f0 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
23700 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
23710 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
23720 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20  data for cursor 
23730 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
23740 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
23750 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
23760 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
23770 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
23780 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
23790 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
237a0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
237b0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
237c0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
237d0 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
237e0 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
237f0 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
23800 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
23810 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
23820 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f  eudo-table..*/./
23830 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79  * Opcode: RowKey
23840 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
23850 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
23860 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  key.**.** Write 
23870 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
23880 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
23890 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72  w key for cursor
238a0 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
238b0 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
238c0 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
238d0 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20   .** The key is 
238e0 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
238f0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
23900 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
23910 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
23920 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
23930 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
23940 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
23950 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
23960 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
23970 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
23980 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
23990 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
239a0 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a  case OP_RowKey:.
239b0 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
239c0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
239d0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
239e0 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
239f0 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70  .  i64 n64;..  p
23a00 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
23a10 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
23a20 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
23a30 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68  );..  /* Note th
23a40 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f  at RowKey and Ro
23a50 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79  wData are really
23a60 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
23a70 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  e instruction */
23a80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23a90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23aa0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23ab0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23ac0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23ad0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
23ae0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23af0 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70  pC->isTable || p
23b00 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52  Op->opcode!=OP_R
23b10 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
23b20 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
23b30 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 || pOp->opcod
23b40 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e==OP_RowData );
23b50 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23b60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23b70 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
23b80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
23b90 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
23ba0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23bb0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
23bc0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
23bd0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
23be0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
23bf0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
23c00 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50   );..  /* The OP
23c10 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52  _RowKey and OP_R
23c20 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
23c30 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
23c40 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
23c50 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  * OP_Rewind/Op_N
23c60 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
23c70 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
23c80 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
23c90 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20  invalidate.  ** 
23ca0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
23cb0 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ce the following
23cc0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23cd0 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
23ce0 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61  is always.  ** a
23cf0 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e   no-op and can n
23d00 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20  ever fail.  But 
23d10 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70  we leave it in p
23d20 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79  lace as a safety
23d30 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
23d40 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23d50 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
23d60 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23d70 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
23d80 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
23d90 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
23da0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
23db0 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  or;..  if( pC->i
23dc0 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
23dd0 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
23de0 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41  Table );.    VVA
23df0 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
23e00 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
23e10 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
23e20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
23e30 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
23e40 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
23e50 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
23e60 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
23e70 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
23e80 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
23e90 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
23ea0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
23eb0 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
23ec0 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
23ed0 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72  {.    VVA_ONLY(r
23ee0 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
23ef0 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
23f00 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74   &n);.    assert
23f10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
23f20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a  );    /* DataSiz
23f30 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
23f40 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33  */.    if( n>(u3
23f50 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
23f60 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
23f70 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
23f80 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
23f90 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e   }.  testcase( n
23fa0 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  ==0 );.  if( sql
23fb0 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
23fc0 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20  AndResize(pOut, 
23fd0 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20  MAX(n,32)) ){.  
23fe0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
23ff0 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
24000 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
24010 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
24020 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
24030 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
24040 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24050 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
24060 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
24070 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
24080 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
24090 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
240a0 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
240b0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
240c0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
240d0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
240e0 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
240f0 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
24100 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
24110 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
24120 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
24130 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24140 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
24150 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
24160 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
24170 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
24180 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
24190 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
241a0 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
241b0 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
241c0 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
241d0 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
241e0 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
241f0 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
24200 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
24210 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
24220 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
24230 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
24240 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
24250 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
24260 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
24270 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
24280 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
24290 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
242a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
242b0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
242c0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
242d0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
242e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
242f0 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  4 v;.  sqlite3_v
24300 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
24310 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
24320 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
24330 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24340 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24350 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24360 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24370 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24380 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
24390 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
243a0 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e  leReg==0 || pC->
243b0 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
243c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
243d0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
243e0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
243f0 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
24400 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
24410 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
24420 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
24430 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
24440 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
24450 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
24460 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
24470 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  ){.    pVtab = p
24480 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  C->pVtabCursor->
24490 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
244a0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
244b0 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
244c0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
244d0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
244e0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
244f0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
24500 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
24510 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
24520 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
24530 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
24540 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
24550 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
24560 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
24570 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
24580 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
24590 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
245a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
245b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
245c0 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
245d0 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
245e0 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
245f0 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
24600 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
24610 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
24620 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
24630 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
24640 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24650 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
24660 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
24670 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
24680 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
24690 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
246a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
246b0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
246c0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
246d0 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
246e0 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
246f0 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
24700 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
24710 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
24720 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
24730 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
24740 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
24750 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
24760 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
24770 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24780 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24790 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
247a0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
247b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
247c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
247d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
247e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
247f0 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
24800 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  lid = 0;.  pC->c
24810 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24820 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
24830 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
24840 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
24850 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
24860 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
24870 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24880 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
24890 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
248a0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
248b0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
248c0 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
248d0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
248e0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
248f0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
24900 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
24910 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
24920 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
24930 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
24940 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
24950 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
24960 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
24970 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
24980 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
24990 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
249a0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
249b0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
249c0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
249d0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
249e0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
249f0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
24a00 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
24a10 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
24a20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
24a30 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
24a40 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
24a50 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
24a60 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
24a70 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
24a80 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
24a90 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
24aa0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24ab0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
24ac0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
24ad0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24ae0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
24af0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24b00 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24b10 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24b20 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
24b30 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
24b40 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
24b50 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
24b60 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
24b70 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
24b80 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e  , &res);.  pC->n
24b90 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
24ba0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
24bb0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
24bc0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
24bd0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
24be0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24bf0 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ALE;.#ifdef SQLI
24c00 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
24c10 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b  eekOp = OP_Last;
24c20 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
24c30 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56  p->p2>0 ){.    V
24c40 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
24c50 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
24c60 28 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f 70  ( res ) pc = pOp
24c70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
24c80 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
24c90 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
24ca0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
24cb0 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
24cc0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
24cd0 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
24ce0 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
24cf0 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
24d00 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
24d10 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
24d20 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
24d30 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
24d40 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
24d50 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
24d60 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
24d70 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
24d80 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
24d90 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
24da0 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
24db0 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
24dc0 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
24dd0 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
24de0 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
24df0 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
24e00 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
24e10 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
24e20 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
24e30 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
24e40 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
24e50 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
24e60 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
24e70 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
24e80 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
24e90 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
24ea0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
24eb0 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
24ec0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
24ed0 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
24ee0 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
24ef0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
24f00 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
24f10 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
24f20 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
24f30 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
24f40 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
24f50 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
24f60 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
24f70 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
24f80 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
24f90 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
24fa0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
24fb0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
24fc0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
24fd0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
24fe0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
24ff0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
25000 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
25010 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
25020 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
25030 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
25040 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
25050 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
25060 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
25070 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
25080 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
25090 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
250a0 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
250b0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
250c0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
250d0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
250e0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
250f0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
25100 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
25110 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
25120 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
25130 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
25140 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
25150 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
25160 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
25170 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
25180 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65  ot Prev..*/.case
25190 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
251a0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
251b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
251c0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
251d0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
251e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
251f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25200 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25210 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25220 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25230 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
25240 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
25250 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
25260 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
25270 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23   );.  res = 1;.#
25280 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
25290 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
252a0 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e  = OP_Rewind;.#en
252b0 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74  dif.  if( isSort
252c0 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
252d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
252e0 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26  rterRewind(pC, &
252f0 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
25300 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
25310 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
25320 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
25330 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
25340 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
25350 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
25360 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
25370 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
25380 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25390 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  ALE;.    pC->row
253a0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
253b0 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   }.  pC->nullRow
253c0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73   = (u8)res;.  as
253d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
253e0 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
253f0 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p );.  VdbeBranc
25400 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
25410 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
25420 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
25430 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
25440 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25450 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
25460 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
25470 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
25480 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
25490 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
254a0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
254b0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
254c0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
254d0 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
254e0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
254f0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
25500 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
25510 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
25520 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
25530 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
25540 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
25550 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
25560 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
25570 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
25580 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
25590 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
255a0 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
255b0 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
255c0 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
255d0 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
255e0 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
255f0 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
25600 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
25610 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
25620 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
25630 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
25640 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
25650 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
25660 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
25670 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
25680 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
25690 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
256a0 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
256b0 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
256c0 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
256d0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
256e0 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
256f0 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
25700 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
25710 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
25720 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
25730 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
25740 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
25750 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
25760 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
25770 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
25780 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
25790 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
257a0 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
257b0 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
257c0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
257d0 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
257e0 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
257f0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
25800 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
25810 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
25820 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
25830 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
25840 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
25850 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
25860 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
25870 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e  ee also: Prev, N
25880 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20  extIfOpen.*/./* 
25890 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70  Opcode: NextIfOp
258a0 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
258b0 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
258c0 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
258d0 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20  ike Next except 
258e0 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
258f0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
25900 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
25910 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  -op..*/./* Opcod
25920 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
25930 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
25940 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
25950 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
25960 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
25970 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
25980 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
25990 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
259a0 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
259b0 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
259c0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
259d0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
259e0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
259f0 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
25a00 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
25a10 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
25a20 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
25a30 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
25a40 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
25a50 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
25a60 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
25a70 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
25a80 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
25a90 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
25aa0 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
25ab0 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
25ac0 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
25ad0 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
25ae0 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
25af0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
25b00 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
25b10 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
25b20 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
25b30 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
25b40 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
25b50 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
25b60 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
25b70 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
25b80 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
25b90 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
25ba0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
25bb0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
25bc0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
25bd0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
25be0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
25bf0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
25c00 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
25c10 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
25c20 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
25c30 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
25c40 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
25c50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
25c60 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
25c70 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
25c80 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
25c90 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
25ca0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
25cb0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
25cc0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
25cd0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
25ce0 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
25cf0 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
25d00 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
25d10 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
25d20 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
25d30 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
25d40 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
25d50 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
25d60 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
25d70 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78  ust like Prev ex
25d80 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
25d90 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
25da0 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
25db0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
25dc0 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
25dd0 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20   {  /* jump */. 
25de0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25df0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70  .  int res;..  p
25e00 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
25e10 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
25e20 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
25e30 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
25e40 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
25e50 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c  rterNext(db, pC,
25e60 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e   &res);.  goto n
25e70 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
25e80 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20  P_PrevIfOpen:   
25e90 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
25ea0 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20   OP_NextIfOpen: 
25eb0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
25ec0 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
25ed0 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b  ->p1]==0 ) break
25ee0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
25ef0 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ugh */.case OP_P
25f00 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
25f10 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
25f20 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20  _Next:          
25f30 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
25f40 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25f50 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25f60 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
25f70 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79  t( pOp->p5<Array
25f80 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
25f90 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
25fa0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25fb0 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   res = pOp->p3;.
25fc0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
25fd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25fe0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25ff0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26000 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20  pC->pCursor );. 
26010 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20   assert( res==0 
26020 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43  || (res==1 && pC
26030 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b  ->isTable==0) );
26040 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73  .  testcase( res
26050 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
26060 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
26070 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
26080 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
26090 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
260a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
260b0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
260c0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
260d0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
260e0 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73  revious );.  ass
260f0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26100 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20  !=OP_NextIfOpen 
26110 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
26120 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
26130 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
26140 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26150 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c  OP_PrevIfOpen ||
26160 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
26170 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
26180 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20  revious);..  /* 
26190 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
261a0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
261b0 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  er SeekGT, SeekG
261c0 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20  E, and Rewind.. 
261d0 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63   ** The Prev opc
261e0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
261f0 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53   after SeekLT, S
26200 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e  eekLE, and Last.
26210 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
26220 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
26230 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  xt || pOp->opcod
26240 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
26250 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
26260 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54  eekOp==OP_SeekGT
26270 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
26280 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20  OP_SeekGE.      
26290 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
262a0 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d  OP_Rewind || pC-
262b0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e  >seekOp==OP_Foun
262c0 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
262d0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
262e0 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ev || pOp->opcod
262f0 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
26300 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
26310 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54  eekOp==OP_SeekLT
26320 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
26330 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20  OP_SeekLE.      
26340 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
26350 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63  OP_Last );..  rc
26360 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
26370 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  nce(pC->pCursor,
26380 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69   &res);.next_tai
26390 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  l:.  pC->cacheSt
263a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
263b0 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  LE;.  VdbeBranch
263c0 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b  Taken(res==0,2);
263d0 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
263e0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
263f0 20 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20 70   = 0;.    pc = p
26400 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
26410 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
26420 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
26430 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
26440 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
26450 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
26460 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e  }else{.    pC->n
26470 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a  ullRow = 1;.  }.
26480 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
26490 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20 63  id = 0;.  goto c
264a0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
264b0 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
264c0 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
264d0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
264e0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
264f0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
26500 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
26510 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
26520 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
26530 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
26540 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
26550 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
26560 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
26570 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
26580 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
26590 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
265a0 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
265b0 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
265c0 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
265d0 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
265e0 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
265f0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
26600 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
26610 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
26620 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
26630 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
26640 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
26650 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
26660 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
26670 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
26680 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
26690 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
266a0 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
266b0 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
266c0 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
266d0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
266e0 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
266f0 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  he cursor must h
26700 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65  ave.** just done
26710 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73   a seek to the s
26720 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65  pot where the ne
26730 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65  w entry is to be
26740 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68   inserted..** Th
26750 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64  is flag avoids d
26760 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65  oing an extra se
26770 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ek..**.** This i
26780 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
26790 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
267a0 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
267b0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
267c0 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
267d0 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
267e0 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
267f0 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
26800 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
26810 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
26820 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
26830 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
26840 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
26850 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e   int nKey;.  con
26860 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a  st char *zKey;..
26870 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26880 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26890 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
268a0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
268b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
268c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
268d0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
268e0 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
268f0 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
26900 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
26910 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
26920 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
26930 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
26940 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
26950 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
26960 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26970 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
26980 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74  ange++;.  assert
26990 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
269a0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
269b0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ble==0 );.  rc =
269c0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
269d0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
269e0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
269f0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
26a00 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
26a10 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
26a20 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
26a30 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
26a40 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
26a50 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
26a60 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
26a70 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
26a80 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
26a90 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
26aa0 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
26ab0 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
26ac0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
26ad0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
26ae0 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
26af0 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
26b00 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
26b10 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
26b20 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
26b30 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
26b40 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
26b50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26b60 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
26b70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
26b80 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
26b90 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
26ba0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
26bb0 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
26bc0 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
26bd0 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
26be0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
26bf0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
26c00 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
26c10 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
26c20 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
26c30 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
26c40 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
26c50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26c60 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
26c70 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
26c80 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
26c90 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
26ca0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
26cb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
26cc0 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
26cd0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
26ce0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
26cf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26d00 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26d10 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
26d20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26d30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26d40 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
26d50 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
26d60 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
26d70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26d80 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
26d90 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
26da0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
26db0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
26dc0 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c  ->p3;.  r.defaul
26dd0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d  t_rc = 0;.  r.aM
26de0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
26df0 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
26e00 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
26e10 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
26e20 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
26e30 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
26e40 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
26e50 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  }.#endif.  rc = 
26e60 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
26e70 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
26e80 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
26e90 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
26ea0 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
26eb0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
26ec0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
26ed0 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73  pCrsr);.  }.  as
26ee0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
26ef0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
26f00 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
26f10 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
26f20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26f30 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
26f40 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
26f50 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
26f60 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
26f70 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26f80 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
26f90 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
26fa0 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
26fb0 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
26fc0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
26fd0 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
26fe0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
26ff0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
27000 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
27010 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
27020 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
27030 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
27040 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
27050 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
27060 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
27070 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
27080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
27090 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
270a0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
270b0 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
270c0 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
270d0 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
270e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
270f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27100 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27110 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27120 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
27130 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
27140 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
27150 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70   pCrsr!=0 );.  p
27160 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27170 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71  _Null;.  rc = sq
27180 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
27190 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
271a0 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74   NEVER(rc) ) got
271b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
271c0 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rror;.  assert( 
271d0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
271e0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
271f0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
27200 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e  0 );.  if( !pC->
27210 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
27220 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
27230 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
27240 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
27250 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
27260 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27270 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
27280 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20  Crsr, &rowid);. 
27290 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
272a0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
272b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
272c0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
272d0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
272e0 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  id;.    pOut->fl
272f0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
27300 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
27310 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
27320 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
27330 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
27340 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
27350 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
27360 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
27370 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
27380 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
27390 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
273a0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
273b0 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
273c0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
273d0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
273e0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
273f0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
27400 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
27410 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27420 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
27430 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
27440 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
27450 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
27460 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
27470 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
27480 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
27490 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
274a0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
274b0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
274c0 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
274d0 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
274e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
274f0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
27500 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
27510 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
27520 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27530 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
27540 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
27550 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
27560 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
27570 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
27580 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
27590 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
275a0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
275b0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
275c0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
275d0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
275e0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
275f0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
27600 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27610 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
27620 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
27630 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
27640 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
27650 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27660 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
27670 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
27680 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
27690 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
276a0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
276b0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
276c0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
276d0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
276e0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
276f0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
27700 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
27710 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27720 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
27730 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
27740 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
27750 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
27760 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
27770 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27780 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
27790 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
277a0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
277b0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
277c0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
277d0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
277e0 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
277f0 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
27800 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27810 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
27820 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
27830 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
27840 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
27850 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
27860 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
27870 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
27880 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
27890 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
278a0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
278b0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
278c0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
278d0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
278e0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
278f0 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
27900 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
27910 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
27920 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27930 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
27940 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
27950 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
27960 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
27970 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
27980 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
27990 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
279a0 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
279b0 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
279c0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
279d0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
279e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
279f0 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
27a00 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
27a10 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
27a20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
27a30 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
27a40 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
27a50 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
27a60 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
27a70 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27a80 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
27a90 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
27aa0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
27ab0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27ac0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27ad0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27ae0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27af0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
27b00 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
27b10 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
27b20 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
27b30 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
27b40 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27b50 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
27b60 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
27b70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
27b80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
27b90 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
27ba0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
27bb0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
27bc0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
27bd0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
27be0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
27bf0 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
27c00 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
27c10 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
27c20 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
27c30 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
27c40 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
27c50 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
27c60 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
27c70 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
27c80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
27c90 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
27ca0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
27cb0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
27cc0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
27cd0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
27ce0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
27cf0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
27d00 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
27d10 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
27d20 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
27d30 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
27d40 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
27d50 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
27d60 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
27d70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
27d80 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20  xKeyCompare(db, 
27d90 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
27da0 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78   assert( (OP_Idx
27db0 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  LE&1)==(OP_IdxLT
27dc0 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45  &1) && (OP_IdxGE
27dd0 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31  &1)==(OP_IdxGT&1
27de0 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d  ) );.  if( (pOp-
27df0 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f  >opcode&1)==(OP_
27e00 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20  IdxLT&1) ){.    
27e10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
27e20 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
27e30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
27e40 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65  _IdxLT );.    re
27e50 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73  s = -res;.  }els
27e60 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
27e70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
27e80 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxGE || pOp->opc
27e90 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
27ea0 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a  .    res++;.  }.
27eb0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
27ec0 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66  n(res>0,2);.  if
27ed0 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 70  ( res>0 ){.    p
27ee0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20  c = pOp->p2 - 1 
27ef0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27f00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
27f10 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
27f20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
27f30 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
27f40 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
27f50 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
27f60 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
27f70 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
27f80 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
27f90 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
27fa0 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
27fb0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
27fc0 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
27fd0 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
27fe0 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
27ff0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
28000 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
28010 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
28020 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
28030 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
28040 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
28050 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
28060 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
28070 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
28080 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
28090 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
280a0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
280b0 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
280c0 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
280d0 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
280e0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
280f0 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
28100 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
28110 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
28120 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
28130 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
28140 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
28150 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
28160 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
28170 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
28180 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
28190 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
281a0 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
281b0 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
281c0 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
281d0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
281e0 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
281f0 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
28200 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
28210 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
28220 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
28230 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
28240 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
28250 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
28260 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
28270 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
28280 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
28290 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
282a0 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
282b0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
282c0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  e */.  int iMove
282d0 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20  d;.  int iCnt;. 
282e0 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20   Vdbe *pVdbe;.  
282f0 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65  int iDb;..  asse
28300 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
28310 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
28320 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
28330 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20  LTABLE.  iCnt = 
28340 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
28350 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
28360 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e   pVdbe = pVdbe->
28370 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
28380 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44  pVdbe->magic==VD
28390 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
283a0 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72  pVdbe->bIsReader
283b0 20 0a 20 20 20 20 20 26 26 20 70 56 64 62 65 2d   .     && pVdbe-
283c0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20  >inVtabMethod<2 
283d0 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20  && pVdbe->pc>=0 
283e0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43  .    ){.      iC
283f0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
28400 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
28410 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65  b->nVdbeRead;.#e
28420 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
28430 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
28440 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
28450 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
28460 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
28470 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
28480 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
28490 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
284a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
284b0 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
284c0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
284d0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
284e0 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64  b) );.    iMoved
284f0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
28500 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73  eded.  Only to s
28510 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
28520 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
28530 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
28540 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
28550 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
28560 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
28570 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
28580 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
28590 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e  i = iMoved;.#ifn
285a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
285b0 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
285c0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
285d0 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b   && iMoved!=0 ){
285e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
285f0 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20  otPageMoved(db, 
28600 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  iDb, iMoved, pOp
28610 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20  ->p1);.      /* 
28620 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f  All OP_Destroy o
28630 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20  perations occur 
28640 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65  on the same btre
28650 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  e */.      asser
28660 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  t( resetSchemaOn
28670 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65  Fault==0 || rese
28680 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
28690 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72  iDb+1 );.      r
286a0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
286b0 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d  t = iDb+1;.    }
286c0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
286d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
286e0 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
286f0 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
28700 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
28710 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
28720 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
28730 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
28740 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
28750 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
28760 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
28770 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
28780 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
28790 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
287a0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
287b0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
287c0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
287d0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
287e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
287f0 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
28800 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
28810 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
28820 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
28830 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
28840 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
28850 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
28860 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
28870 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
28880 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
28890 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
288a0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
288b0 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
288c0 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
288d0 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
288e0 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
288f0 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
28900 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
28910 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
28920 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
28930 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
28940 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
28950 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
28960 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
28970 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
28980 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
28990 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
289a0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
289b0 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
289c0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
289d0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
289e0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
289f0 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
28a00 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
28a10 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
28a20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
28a30 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
28a40 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
28a50 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
28a60 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
28a70 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
28a80 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
28a90 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
28aa0 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
28ab0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
28ac0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
28ad0 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
28ae0 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
28af0 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
28b00 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
28b10 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
28b20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
28b30 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
28b40 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
28b50 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
28b60 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
28b70 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
28b80 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
28b90 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
28ba0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
28bb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
28bc0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f   Opcode: ResetSo
28bd0 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  rter P1 * * * *.
28be0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
28bf0 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74   contents from t
28c00 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
28c10 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20  le or sorter.** 
28c20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20  that is open on 
28c30 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
28c40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c   This opcode onl
28c50 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73  y works for curs
28c60 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72  ors used for sor
28c70 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e  ting and.** open
28c80 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45  ed with OP_OpenE
28c90 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53  phemeral or OP_S
28ca0 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61  orterOpen..*/.ca
28cb0 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65  se OP_ResetSorte
28cc0 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  r: {.  VdbeCurso
28cd0 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72  r *pC;. .  asser
28ce0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28cf0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
28d00 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
28d10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
28d20 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
28d30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 53   );.  if( pC->pS
28d40 6f 72 74 65 72 20 29 7b 0a 20 20 20 20 73 71 6c  orter ){.    sql
28d50 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
28d60 73 65 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f 72  set(db, pC->pSor
28d70 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ter);.  }else{. 
28d80 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
28d90 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20  sEphemeral );.  
28da0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
28db0 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43  reeClearTableOfC
28dc0 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f  ursor(pC->pCurso
28dd0 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
28de0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
28df0 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
28e00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
28e10 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
28e20 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
28e30 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65  cate a new table
28e40 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
28e50 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
28e60 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
28e70 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
28e80 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
28e90 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
28ea0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
28eb0 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
28ec0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
28ed0 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
28ee0 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
28ef0 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
28f00 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
28f10 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61  etween a table a
28f20 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74  nd an index is t
28f30 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75  his:  A table mu
28f40 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62  st.** have a 4-b
28f50 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  yte integer key 
28f60 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62  and can have arb
28f70 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e  itrary data.  An
28f80 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e   index.** has an
28f90 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62   arbitrary key b
28fa0 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a  ut no data..**.*
28fb0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61  * See also: Crea
28fc0 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70  teIndex.*/./* Op
28fd0 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65  code: CreateInde
28fe0 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
28ff0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
29000 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
29010 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
29020 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
29030 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
29040 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
29050 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
29060 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
29070 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
29080 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
29090 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
290a0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
290b0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
290c0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
290d0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
290e0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
290f0 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
29100 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
29110 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
29120 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
29130 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
29140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
29150 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
29160 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
29170 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
29180 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
29190 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ase */.  int pgn
291a0 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  o;.  int flags;.
291b0 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67    Db *pDb;..  pg
291c0 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
291d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
291e0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
291f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
29200 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
29210 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
29220 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
29230 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
29240 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
29250 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
29260 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
29270 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
29280 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
29290 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
292a0 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
292b0 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
292c0 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
292d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
292e0 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42  ags = BTREE_BLOB
292f0 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  KEY;.  }.  rc = 
29300 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
29310 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
29320 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
29330 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
29340 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
29350 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
29360 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50  eSchema P1 * * P
29370 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
29380 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
29390 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
293a0 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
293b0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
293c0 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
293d0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
293e0 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4. .**.** This 
293f0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
29400 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
29410 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
29420 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
29430 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
29440 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
29450 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
29460 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
29470 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
29480 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
29490 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
294a0 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
294b0 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
294c0 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
294d0 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61  ..  /* Any prepa
294e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68  red statement th
294f0 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  at invokes this 
29500 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64  opcode will hold
29510 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e   mutexes.  ** on
29520 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54   every btree.  T
29530 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75  his is a prerequ
29540 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69  isite for invoki
29550 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ng .  ** sqlite3
29560 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a  InitCallback()..
29570 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
29580 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
29590 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44  Db=0; iDb<db->nD
295a0 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61  b; iDb++){.    a
295b0 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c  ssert( iDb==1 ||
295c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c   sqlite3BtreeHol
295d0 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b  dsMutex(db->aDb[
295e0 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d  iDb].pBt) );.  }
295f0 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d  .#endif..  iDb =
29600 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
29610 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
29620 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
29630 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70  ssert( DbHasProp
29640 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42  erty(db, iDb, DB
29650 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
29660 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62  ;.  /* Used to b
29670 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  e a conditional 
29680 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72  */ {.    zMaster
29690 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28   = SCHEMA_TABLE(
296a0 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61  iDb);.    initDa
296b0 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  ta.db = db;.    
296c0 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70  initData.iDb = p
296d0 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74  Op->p1;.    init
296e0 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
296f0 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  &p->zErrMsg;.   
29700 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d   zSql = sqlite3M
29710 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20  Printf(db,.     
29720 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
29730 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52  rootpage, sql FR
29740 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45  OM '%q'.%s WHERE
29750 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77   %s ORDER BY row
29760 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e  id",.       db->
29770 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  aDb[iDb].zName, 
29780 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34  zMaster, pOp->p4
29790 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71  .z);.    if( zSq
297a0 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  l==0 ){.      rc
297b0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
297c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
297d0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e    assert( db->in
297e0 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20  it.busy==0 );.  
297f0 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
29800 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69  y = 1;.      ini
29810 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54  tData.rc = SQLIT
29820 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65  E_OK;.      asse
29830 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  rt( !db->mallocF
29840 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72  ailed );.      r
29850 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
29860 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
29870 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
29880 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
29890 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
298a0 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e  ITE_OK ) rc = in
298b0 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20  itData.rc;.     
298c0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
298d0 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  b, zSql);.      
298e0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
298f0 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
29900 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33 52  f( rc ) sqlite3R
29910 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
29920 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
29930 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
29940 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f  _NOMEM ){.    go
29950 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
29960 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
29970 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29980 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
29990 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
299a0 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
299b0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
299c0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
299d0 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
299e0 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
299f0 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
29a00 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
29a10 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
29a20 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
29a30 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
29a40 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
29a50 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
29a60 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
29a70 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
29a80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
29a90 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
29aa0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
29ab0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
29ac0 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
29ad0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
29ae0 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
29af0 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
29b00 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
29b10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
29b20 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
29b30 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
29b40 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
29b50 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
29b60 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
29b70 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
29b80 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
29b90 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
29ba0 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
29bb0 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
29bc0 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
29bd0 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
29be0 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
29bf0 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
29c00 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
29c10 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
29c20 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
29c30 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
29c40 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
29c50 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
29c60 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
29c70 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
29c80 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
29c90 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
29ca0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
29cb0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
29cc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
29cd0 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
29ce0 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
29cf0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
29d00 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
29d10 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
29d20 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
29d30 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
29d40 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
29d50 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
29d60 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
29d70 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
29d80 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
29d90 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a  Destroy opcode).
29da0 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ** in order to k
29db0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
29dc0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
29dd0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
29de0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
29df0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
29e00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
29e10 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
29e20 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
29e30 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
29e40 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
29e50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
29e60 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
29e70 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
29e80 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
29e90 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
29ea0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
29eb0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
29ec0 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
29ed0 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
29ee0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
29ef0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
29f00 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
29f10 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
29f20 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
29f30 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69  estroy opcode) i
29f40 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
29f50 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  .** the internal
29f60 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
29f70 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
29f80 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
29f90 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
29fa0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
29fb0 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71  pTrigger: {.  sq
29fc0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
29fd0 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20  leteTrigger(db, 
29fe0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
29ff0 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2a000 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2a010 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
2a020 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CHECK./* Opcode:
2a030 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20   IntegrityCk P1 
2a040 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a  P2 P3 * P5.**.**
2a050 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20   Do an analysis 
2a060 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  of the currently
2a070 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20   open database. 
2a080 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67   Store in.** reg
2a090 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78  ister P1 the tex
2a0a0 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65  t of an error me
2a0b0 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67  ssage describing
2a0c0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a   any problems..*
2a0d0 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73  * If no problems
2a0e0 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72   are found, stor
2a0f0 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69  e a NULL in regi
2a100 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  ster P1..**.** T
2a110 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63  he register P3 c
2a120 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69  ontains the maxi
2a130 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c  mum number of al
2a140 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a  lowed errors..**
2a150 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29   At most reg(P3)
2a160 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20   errors will be 
2a170 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20  reported..** In 
2a180 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2a190 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20   analysis stops 
2a1a0 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50  as soon as reg(P
2a1b0 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a  1) errors are .*
2a1c0 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29  * seen.  Reg(P1)
2a1d0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
2a1e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
2a1f0 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e  rrors remaining.
2a200 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20  .**.** The root 
2a210 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20  page numbers of 
2a220 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  all tables in th
2a230 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69  e database are i
2a240 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64  nteger.** stored
2a250 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67   in reg(P1), reg
2a260 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32  (P1+1), reg(P1+2
2a270 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61  ), ....  There a
2a280 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20  re P2 tables.** 
2a290 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  total..**.** If 
2a2a0 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P5 is not zero, 
2a2b0 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  the check is don
2a2c0 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61  e on the auxilia
2a2d0 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  ry database.** f
2a2e0 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69  ile, not the mai
2a2f0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
2a300 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2a310 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  de is used to im
2a320 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65  plement the inte
2a330 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67  grity_check prag
2a340 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ma..*/.case OP_I
2a350 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20  ntegrityCk: {.  
2a360 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20  int nRoot;      
2a370 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
2a380 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28  les to check.  (
2a390 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70  Number of root p
2a3a0 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20  ages.) */.  int 
2a3b0 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41  *aRoot;     /* A
2a3c0 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65  rray of rootpage
2a3d0 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62   numbers for tab
2a3e0 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65  les to be checke
2a3f0 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20  d */.  int j;   
2a400 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2a410 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
2a420 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  nErr;       /* N
2a430 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
2a440 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68  reported */.  ch
2a450 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a  ar *z;        /*
2a460 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72   Text of the err
2a470 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d  or report */.  M
2a480 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f  em *pnErr;     /
2a490 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69  * Register keepi
2a4a0 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f  ng track of erro
2a4b0 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a  rs remaining */.
2a4c0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
2a4d0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f  sReader );.  nRo
2a4e0 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ot = pOp->p2;.  
2a4f0 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
2a500 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c  );.  aRoot = sql
2a510 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
2a520 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a  db, sizeof(int)*
2a530 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69  (nRoot+1) );.  i
2a540 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f  f( aRoot==0 ) go
2a550 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73  to no_mem;.  ass
2a560 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2a570 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
2a580 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
2a590 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d  );.  pnErr = &aM
2a5a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2a5b0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2a5c0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2a5d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2a5e0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
2a5f0 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
2a600 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  b))==0 );.  pIn1
2a610 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2a620 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  ];.  for(j=0; j<
2a630 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20  nRoot; j++){.   
2a640 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74   aRoot[j] = (int
2a650 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  )sqlite3VdbeIntV
2a660 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a  alue(&pIn1[j]);.
2a670 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d    }.  aRoot[j] =
2a680 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2a690 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p5<db->nDb );
2a6a0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2a6b0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2a6c0 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a  sk, pOp->p5) );.
2a6d0 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72    z = sqlite3Btr
2a6e0 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b  eeIntegrityCheck
2a6f0 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35  (db->aDb[pOp->p5
2a700 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52  ].pBt, aRoot, nR
2a710 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  oot,.           
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72        (int)pnErr
2a740 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20  ->u.i, &nErr);. 
2a750 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
2a760 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45  b, aRoot);.  pnE
2a770 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b  rr->u.i -= nErr;
2a780 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2a790 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2a7a0 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b    if( nErr==0 ){
2a7b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d  .    assert( z==
2a7c0 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  0 );.  }else if(
2a7d0 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74   z==0 ){.    got
2a7e0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73  o no_mem;.  }els
2a7f0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
2a800 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31  beMemSetStr(pIn1
2a810 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  , z, -1, SQLITE_
2a820 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72  UTF8, sqlite3_fr
2a830 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ee);.  }.  UPDAT
2a840 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
2a850 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
2a860 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2a870 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  g(pIn1, encoding
2a880 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2a890 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2a8a0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
2a8b0 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ECK */../* Opcod
2a8c0 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20  e: RowSetAdd P1 
2a8d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2a8e0 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31  psis:  rowset(P1
2a8f0 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e  )=r[P2].**.** In
2a900 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
2a910 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
2a920 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
2a930 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
2a940 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
2a950 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
2a960 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
2a970 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
2a980 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2a990 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
2a9a0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
2a9b0 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
2a9c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2a9d0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2a9e0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
2a9f0 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
2aa00 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2aa10 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
2aa20 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2aa30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
2aa40 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
2aa50 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
2aa60 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2aa70 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2aa80 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2aa90 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
2aaa0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
2aab0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
2aac0 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
2aad0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2aae0 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
2aaf0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2ab00 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74  s:  r[P3]=rowset
2ab10 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61  (P1).**.** Extra
2ab20 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  ct the smallest 
2ab30 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65  value from boole
2ab40 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20  an index P1 and 
2ab50 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  put that value i
2ab60 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
2ab70 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c  P3.  Or, if bool
2ab80 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20  ean index P1 is 
2ab90 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
2aba0 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
2abb0 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
2abc0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
2abd0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
2abe0 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
2abf0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
2ac00 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61  out3 */.  i64 va
2ac10 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  l;..  pIn1 = &aM
2ac20 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
2ac30 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2ac40 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2ac50 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
2ac60 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e  owSetNext(pIn1->
2ac70 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
2ac80 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
2ac90 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
2aca0 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
2acb0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2acc0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
2acd0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2ace0 2d 20 31 3b 0a 20 20 20 20 56 64 62 65 42 72 61  - 1;.    VdbeBra
2acf0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
2ad00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
2ad10 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
2ad20 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
2ad30 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
2ad40 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2ad50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
2ad60 61 6c 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  al);.    VdbeBra
2ad70 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20  nchTaken(0,2);. 
2ad80 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
2ad90 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
2ada0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2adb0 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
2adc0 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
2add0 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77   if r[P3] in row
2ade0 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a  set(P1) goto P2.
2adf0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2ae00 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
2ae10 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
2ae20 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
2ae30 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
2ae40 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
2ae50 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
2ae60 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
2ae70 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
2ae80 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
2ae90 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
2aea0 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
2aeb0 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
2aec0 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
2aed0 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
2aee0 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
2aef0 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
2af00 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
2af10 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
2af20 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
2af30 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
2af40 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
2af50 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
2af60 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
2af70 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
2af80 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
2af90 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
2afa0 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
2afb0 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
2afc0 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
2afd0 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
2afe0 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
2aff0 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
2b000 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
2b010 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
2b020 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
2b030 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
2b040 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
2b050 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
2b060 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
2b070 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
2b080 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
2b090 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
2b0a0 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
2b0b0 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
2b0c0 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
2b0d0 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
2b0e0 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
2b0f0 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
2b100 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
2b110 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
2b120 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
2b130 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
2b140 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
2b150 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
2b160 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
2b170 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
2b180 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
2b190 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
2b1a0 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
2b1b0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
2b1c0 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
2b1d0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2b1e0 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
2b1f0 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
2b200 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
2b210 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
2b220 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
2b230 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
2b240 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
2b250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
2b260 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
2b270 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
2b280 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
2b290 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2b2a0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
2b2b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
2b2c0 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
2b2d0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
2b2e0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2b2f0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
2b300 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
2b310 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
2b320 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
2b330 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
2b340 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
2b350 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
2b360 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
2b370 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
2b380 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2b390 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
2b3a0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2b3b0 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
2b3c0 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
2b3d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2b3e0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
2b3f0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
2b400 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2b410 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
2b420 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
2b430 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
2b440 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
2b450 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
2b460 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
2b470 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b480 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  iSet, pIn3->u.i)
2b490 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
2b4a0 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c  Taken(exists!=0,
2b4b0 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  2);.    if( exis
2b4c0 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
2b4d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2b4e0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2b4f0 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
2b500 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2b510 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
2b520 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
2b530 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
2b540 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
2b550 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b560 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
2b570 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
2b580 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2b590 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
2b5a0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
2b5b0 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
2b5c0 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
2b5d0 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
2b5e0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
2b5f0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2b600 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
2b610 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
2b620 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
2b630 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
2b640 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
2b650 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
2b660 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
2b670 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2b680 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
2b690 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
2b6a0 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
2b6b0 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
2b6c0 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
2b6d0 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
2b6e0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
2b6f0 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
2b700 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
2b710 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
2b720 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
2b730 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
2b740 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
2b750 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
2b760 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
2b770 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
2b780 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2b790 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
2b7a0 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2b7b0 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  gram..**.** If P
2b7c0 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  5 is non-zero, t
2b7d0 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72  hen recursive pr
2b7e0 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e  ogram invocation
2b7f0 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a   is enabled..*/.
2b800 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a  case OP_Program:
2b810 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2b820 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  p */.  int nMem;
2b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2b840 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
2b850 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ry registers for
2b860 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2b870 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
2b880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
2b890 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70  es of runtime sp
2b8a0 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
2b8b0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2b8c0 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20    Mem *pRt;     
2b8d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
2b8e0 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74  ister to allocat
2b8f0 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  e runtime space 
2b900 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
2b910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b920 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20  Used to iterate 
2b930 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63  through memory c
2b940 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ells */.  Mem *p
2b950 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
2b960 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79    /* Last memory
2b970 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72   cell in new arr
2b980 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  ay */.  VdbeFram
2b990 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20  e *pFrame;      
2b9a0 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d  /* New vdbe fram
2b9b0 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20  e to execute in 
2b9c0 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
2b9d0 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
2b9e0 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65  Sub-program to e
2b9f0 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64  xecute */.  void
2ba00 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20   *t;            
2ba10 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65      /* Token ide
2ba20 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72  ntifying trigger
2ba30 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20   */..  pProgram 
2ba40 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72  = pOp->p4.pProgr
2ba50 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65  am;.  pRt = &aMe
2ba60 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2ba70 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2ba80 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a  nOp>0 );.  .  /*
2ba90 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20   If the p5 flag 
2baa0 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
2bab0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2bac0 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20  ion of triggers 
2bad0 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2bae0 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  d for backwards 
2baf0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70  compatibility (p
2bb00 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73  5 is set if this
2bb10 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a   sub-program.  *
2bb20 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72  * is really a tr
2bb30 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72  igger, not a for
2bb40 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c  eign key action,
2bb50 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65   and the flag se
2bb60 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72  t.  ** and clear
2bb70 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d  ed by the "PRAGM
2bb80 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  A recursive_trig
2bb90 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73  gers" command is
2bba0 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20   clear)..  ** . 
2bbb0 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73   ** It is recurs
2bbc0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
2bbd0 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74  f triggers, at t
2bbe0 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68  he SQL level, th
2bbf0 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  at is .  ** disa
2bc00 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61  bled. In some ca
2bc10 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69  ses a single tri
2bc20 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74  gger may generat
2bc30 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  e more than one 
2bc40 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d  .  ** SubProgram
2bc50 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72   (if the trigger
2bc60 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64   may be executed
2bc70 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
2bc80 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20  one different . 
2bc90 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   ** ON CONFLICT 
2bca0 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50  algorithm). SubP
2bcb0 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65  rogram structure
2bcc0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2bcd0 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  h a.  ** single 
2bce0 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65  trigger all have
2bcf0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2bd00 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72  for the SubProgr
2bd10 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76  am.token .  ** v
2bd20 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69  ariable.  */.  i
2bd30 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
2bd40 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e    t = pProgram->
2bd50 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70  token;.    for(p
2bd60 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2bd70 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d   pFrame && pFram
2bd80 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72  e->token!=t; pFr
2bd90 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2bda0 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46  ent);.    if( pF
2bdb0 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  rame ) break;.  
2bdc0 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61  }..  if( p->nFra
2bdd0 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  me>=db->aLimit[S
2bde0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
2bdf0 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20  GER_DEPTH] ){.  
2be00 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2be10 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
2be20 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2be30 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20  rrMsg, db, "too 
2be40 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
2be50 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
2be60 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ");.    break;. 
2be70 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
2be80 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
2be90 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
2bea0 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
2beb0 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
2bec0 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
2bed0 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
2bee0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2bef0 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
2bf00 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
2bf10 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2bf20 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
2bf30 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
2bf40 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
2bf50 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
2bf60 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
2bf70 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
2bf80 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
2bf90 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
2bfa0 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
2bfb0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
2bfc0 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
2bfd0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
2bfe0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
2bff0 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
2c000 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
2c010 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
2c020 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
2c030 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
2c040 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
2c050 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
2c060 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
2c070 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
2c080 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
2c090 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
2c0a0 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
2c0b0 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
2c0c0 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
2c0d0 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
2c0e0 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
2c0f0 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
2c100 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20  nCsr;.    nByte 
2c110 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2c120 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2c130 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2c140 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2c150 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2c160 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2c170 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2c180 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2c190 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2c1a0 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2c1b0 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2c1c0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2c1d0 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2c1e0 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2c1f0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2c200 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2c210 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2c220 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2c230 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2c240 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2c250 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2c260 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2c270 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2c280 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2c290 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2c2a0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2c2b0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2c2c0 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70    pFrame->pc = p
2c2d0 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  c;.    pFrame->a
2c2e0 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
2c2f0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20     pFrame->nMem 
2c300 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70  = p->nMem;.    p
2c310 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70  Frame->apCsr = p
2c320 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72  ->apCsr;.    pFr
2c330 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70  ame->nCursor = p
2c340 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70  ->nCursor;.    p
2c350 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e  Frame->aOp = p->
2c360 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  aOp;.    pFrame-
2c370 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20  >nOp = p->nOp;. 
2c380 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e     pFrame->token
2c390 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2c3a0 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  en;.    pFrame->
2c3b0 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61  aOnceFlag = p->a
2c3c0 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46  OnceFlag;.    pF
2c3d0 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  rame->nOnceFlag 
2c3e0 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a  = p->nOnceFlag;.
2c3f0 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62  .    pEnd = &Vdb
2c400 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2c410 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  )[pFrame->nChild
2c420 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d  Mem];.    for(pM
2c430 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  em=VdbeFrameMem(
2c440 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70  pFrame); pMem!=p
2c450 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  End; pMem++){.  
2c460 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
2c470 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
2c480 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20  .      pMem->db 
2c490 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  = db;.    }.  }e
2c4a0 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20  lse{.    pFrame 
2c4b0 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b  = pRt->u.pFrame;
2c4c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
2c4d0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f  ogram->nMem+pPro
2c4e0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
2c4f0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b  me->nChildMem );
2c500 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
2c510 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2c520 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
2c530 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  ;.    assert( pc
2c540 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
2c550 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
2c560 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
2c570 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
2c580 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
2c590 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
2c5a0 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
2c5b0 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
2c5c0 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
2c5d0 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
2c5e0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
2c5f0 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
2c600 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2c610 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
2c620 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
2c630 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
2c640 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
2c650 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
2c660 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
2c670 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
2c680 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
2c690 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
2c6a0 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
2c6b0 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
2c6c0 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e  m->nOp;.  p->aOn
2c6d0 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26  ceFlag = (u8 *)&
2c6e0 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72  p->apCsr[p->nCur
2c6f0 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65  sor];.  p->nOnce
2c700 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d  Flag = pProgram-
2c710 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d  >nOnce;.  pc = -
2c720 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61  1;.  memset(p->a
2c730 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e  OnceFlag, 0, p->
2c740 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62  nOnceFlag);..  b
2c750 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2c760 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
2c770 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
2c780 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2c790 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
2c7a0 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
2c7b0 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
2c7c0 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2c7d0 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
2c7e0 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
2c7f0 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
2c800 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
2c810 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
2c820 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
2c830 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
2c840 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
2c850 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
2c860 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
2c870 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
2c880 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
2c890 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
2c8a0 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
2c8b0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2c8c0 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
2c8d0 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
2c8e0 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
2c8f0 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
2c900 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2c910 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2c920 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2c930 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
2c940 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
2c950 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2c960 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
2c970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2c980 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2c990 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2c9a0 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
2c9b0 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
2c9c0 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
2c9d0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2c9e0 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
2c9f0 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
2ca00 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
2ca10 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
2ca20 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
2ca30 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
2ca40 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
2ca50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ca60 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
2ca70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ca80 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
2ca90 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
2caa0 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
2cab0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b  .** Synopsis: fk
2cac0 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a  ctr[P1]+=P2.**.*
2cad0 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63  * Increment a "c
2cae0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2caf0 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79  r" by P2 (P2 may
2cb00 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20   be negative or 
2cb10 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66  positive)..** If
2cb20 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2cb30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2cb40 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2cb50 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
2cb60 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f  .** (deferred fo
2cb70 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2cb80 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73  aints). Otherwis
2cb90 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f  e, if P1 is zero
2cba0 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d  , the .** statem
2cbb0 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  ent counter is i
2cbc0 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65  ncremented (imme
2cbd0 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2cbe0 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a  y constraints)..
2cbf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75  */.case OP_FkCou
2cc00 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62  nter: {.  if( db
2cc10 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2cc20 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20  _DeferFKs ){.   
2cc30 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2cc40 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  mCons += pOp->p2
2cc50 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
2cc60 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d  p->p1 ){.    db-
2cc70 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b  >nDeferredCons +
2cc80 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2cc90 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f  se{.    p->nFkCo
2cca0 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d  nstraint += pOp-
2ccb0 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  >p2;.  }.  break
2ccc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ccd0 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  FkIfZero P1 P2 *
2cce0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2ccf0 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d  : if fkctr[P1]==
2cd00 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2cd10 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
2cd20 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
2cd30 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
2cd40 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
2cd50 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
2cd60 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
2cd70 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
2cd80 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2cd90 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
2cda0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2cdb0 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
2cdc0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
2cdd0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2cde0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2cdf0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2ce00 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
2ce10 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
2ce20 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
2ce30 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2ce40 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
2ce50 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
2ce60 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
2ce70 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
2ce80 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
2ce90 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
2cea0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2ceb0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
2cec0 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
2ced0 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
2cee0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2cef0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
2cf00 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2cf10 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72  aken(db->nDeferr
2cf20 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2cf30 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2cf40 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2cf50 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
2cf60 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2cf70 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2cf80 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
2cf90 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2cfa0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2cfb0 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
2cfc0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
2cfd0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
2cfe0 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
2cff0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2d000 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2d010 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2d020 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2d030 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d040 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2d050 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2d060 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2d070 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2d080 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2d090 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2d0a0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2d0b0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
2d0c0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
2d0d0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
2d0e0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
2d0f0 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
2d100 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
2d110 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
2d120 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
2d130 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
2d140 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2d150 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
2d160 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
2d170 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
2d180 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2d190 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
2d1a0 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
2d1b0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
2d1c0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
2d1d0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2d1e0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2d1f0 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
2d200 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
2d210 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
2d220 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
2d230 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
2d240 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
2d250 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2d260 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2d270 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
2d280 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
2d290 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2d2a0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
2d2b0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2d2c0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
2d2d0 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
2d2e0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
2d2f0 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
2d300 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2d310 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
2d320 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
2d330 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2d340 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
2d350 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
2d360 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
2d370 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2d380 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
2d390 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
2d3a0 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
2d3b0 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
2d3c0 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
2d3d0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2d3e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2d3f0 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
2d400 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
2d410 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d420 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
2d430 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2d440 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2d450 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31  register P1 is 1
2d460 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d   or greater, jum
2d470 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
2d480 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
2d490 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
2d4a0 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
2d4b0 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
2d4c0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
2d4d0 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
2d4e0 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
2d4f0 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
2d500 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
2d510 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  fPos: {        /
2d520 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2d530 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2d540 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2d550 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2d560 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
2d570 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31  ranchTaken( pIn1
2d580 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69  ->u.i>0, 2);.  i
2d590 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
2d5a0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2d5b0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2d5c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d5d0 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
2d5e0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2d5f0 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69  is: r[P1]+=P3, i
2d600 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74 6f 20 50  f r[P1]<0 goto P
2d610 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2d620 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2d630 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64   an integer.  Ad
2d640 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20  d literal P3 to 
2d650 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20  the value in.** 
2d660 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 6e  register P1 then
2d670 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   if the value of
2d680 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2d690 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
2d6a0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a  jump to P2. .*/.
2d6b0 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
2d6c0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2d6d0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2d6e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2d6f0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2d700 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2d710 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
2d720 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65   pOp->p3;.  Vdbe
2d730 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
2d740 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69  ->u.i<0, 2);.  i
2d750 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29  f( pIn1->u.i<0 )
2d760 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2d770 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2d780 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d790 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32  de: IfZero P1 P2
2d7a0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2d7b0 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20  sis: r[P1]+=P3, 
2d7c0 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f  if r[P1]==0 goto
2d7d0 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65   P2.**.** The re
2d7e0 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
2d7f0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2d800 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20  r.  Add literal 
2d810 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c  P3 to the.** val
2d820 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
2d830 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c  1.  If the resul
2d840 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20  t is exactly 0, 
2d850 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a  jump to P2. .*/.
2d860 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20  case OP_IfZero: 
2d870 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2d880 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2d890 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2d8a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2d8b0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2d8c0 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
2d8d0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64 62  = pOp->p3;.  Vdb
2d8e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2d8f0 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
2d900 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
2d910 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2d920 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2d930 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d940 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a  pcode: AggStep *
2d950 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2d960 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
2d970 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
2d980 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
2d990 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
2d9a0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
2d9b0 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
2d9c0 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
2d9d0 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
2d9e0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2d9f0 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
2da00 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
2da10 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
2da20 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74  ion.  Use regist
2da30 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20  er.** P3 as the 
2da40 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
2da50 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
2da60 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
2da70 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
2da80 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
2da90 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sors..*/.case OP
2daa0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
2dab0 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
2dac0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
2dad0 20 2a 70 52 65 63 3b 0a 20 20 4d 65 6d 20 74 3b   *pRec;.  Mem t;
2dae0 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
2daf0 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
2db00 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
2db10 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
2db20 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
2db30 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65  );.  pRec = &aMe
2db40 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
2db50 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
2db60 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
2db70 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
2db80 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
2db90 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pRec++){.    ass
2dba0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2dbb0 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56  pRec) );.    apV
2dbc0 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
2dbd0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2dbe0 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d  ge(p, pRec);.  }
2dbf0 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
2dc00 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
2dc10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2dc20 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2dc30 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2dc40 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  r) );.  ctx.pMem
2dc50 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
2dc60 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
2dc70 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  ->n++;.  sqlite3
2dc80 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20  VdbeMemInit(&t, 
2dc90 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  db, MEM_Null);. 
2dca0 20 63 74 78 2e 70 4f 75 74 20 3d 20 26 74 3b 0a   ctx.pOut = &t;.
2dcb0 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20    ctx.isError = 
2dcc0 30 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d  0;.  ctx.pVdbe =
2dcd0 20 70 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20   p;.  ctx.iOp = 
2dce0 70 63 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c  pc;.  ctx.skipFl
2dcf0 61 67 20 3d 20 30 3b 0a 20 20 28 63 74 78 2e 70  ag = 0;.  (ctx.p
2dd00 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74  Func->xStep)(&ct
2dd10 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
2dd20 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
2dd30 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  230 */.  if( ctx
2dd40 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
2dd50 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2dd60 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2dd70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2dd80 76 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b  value_text(&t));
2dd90 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
2dda0 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28  Error;.  }.  if(
2ddb0 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b   ctx.skipFlag ){
2ddc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2ddd0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
2dde0 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
2ddf0 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
2de00 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
2de10 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2de20 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
2de30 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
2de40 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b  eMemRelease(&t);
2de50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2de60 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c  Opcode: AggFinal
2de70 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
2de80 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2de90 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a  =r[P1] N=P2.**.*
2dea0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
2deb0 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
2dec0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2ded0 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
2dee0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
2def0 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
2df00 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
2df10 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
2df20 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
2df30 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2df40 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
2df50 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
2df60 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2df70 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2df80 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
2df90 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
2dfa0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
2dfb0 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
2dfc0 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
2dfd0 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
2dfe0 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
2dff0 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
2e000 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
2e010 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
2e020 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
2e030 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
2e040 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
2e050 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
2e060 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
2e070 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
2e080 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
2e090 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2e0a0 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
2e0b0 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
2e0c0 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
2e0d0 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
2e0e0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2e0f0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2e100 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2e110 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
2e120 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41  ~(MEM_Null|MEM_A
2e130 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  gg))==0 );.  rc 
2e140 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
2e150 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70  Finalize(pMem, p
2e160 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
2e170 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
2e180 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2e190 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2e1a0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
2e1b0 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
2e1c0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
2e1d0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2e1e0 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
2e1f0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
2e200 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
2e210 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
2e220 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
2e230 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2e240 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2e250 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2e260 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
2e270 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
2e280 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
2e290 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
2e2a0 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
2e2b0 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
2e2c0 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
2e2d0 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
2e2e0 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
2e2f0 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
2e300 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
2e310 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20  ASSIVE, FULL.** 
2e320 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57 72 69  or RESTART.  Wri
2e330 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
2e340 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
2e350 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
2e360 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
2e370 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
2e380 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
2e390 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2e3a0 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
2e3b0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2e3c0 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
2e3d0 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
2e3e0 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
2e3f0 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
2e400 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
2e410 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
2e420 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
2e430 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
2e440 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
2e450 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
2e460 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
2e470 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
2e480 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
2e490 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
2e4a0 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2e4d0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2e4e0 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e500 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
2e510 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e530 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
2e540 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
2e550 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2e560 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
2e570 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
2e580 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
2e590 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
2e5a0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2e5b0 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
2e5c0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2e5d0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2e5e0 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
2e5f0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2e600 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
2e610 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  T.  );.  rc = sq
2e620 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2e630 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2e640 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
2e650 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
2e660 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2e670 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2e680 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
2e690 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
2e6a0 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
2e6b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
2e6c0 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
2e6d0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2e6e0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
2e6f0 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
2e700 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
2e710 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
2e720 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e730 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
2e740 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
2e750 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2e760 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
2e770 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2e780 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
2e790 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
2e7a0 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
2e7b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
2e7c0 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
2e7d0 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
2e7e0 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
2e7f0 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
2e800 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
2e810 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
2e820 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
2e830 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
2e840 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
2e850 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
2e860 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
2e870 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
2e880 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
2e890 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
2e8a0 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
2e8b0 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
2e8c0 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
2e8d0 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
2e8e0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
2e8f0 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
2e900 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
2e910 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2e920 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
2e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e940 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
2e950 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
2e960 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
2e970 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
2e980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2e990 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
2e9a0 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
2e9b0 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2e9d0 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
2e9e0 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea00 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
2ea10 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
2ea20 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2ea30 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
2ea40 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
2ea50 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
2ea60 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
2ea70 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
2ea80 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65  */.#endif..  eNe
2ea90 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
2eaa0 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
2eab0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
2eac0 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
2ead0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2eae0 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2eaf0 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
2eb00 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2eb10 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
2eb20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2eb30 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2eb40 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
2eb50 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2eb60 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
2eb70 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2eb80 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2eb90 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
2eba0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ebb0 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
2ebc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ebd0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2ebe0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2ebf0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2ec00 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20  ==0 );..  pBt = 
2ec10 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2ec20 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
2ec30 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
2ec40 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
2ec50 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
2ec60 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2ec70 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
2ec80 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ec90 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
2eca0 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
2ecb0 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
2ecc0 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
2ecd0 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
2ece0 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
2ecf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2ed00 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
2ed10 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
2ed20 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b  name(pPager, 1);
2ed30 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  ..  /* Do not al
2ed40 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e  low a transition
2ed50 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65   to journal_mode
2ed60 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62  =WAL for a datab
2ed70 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70  ase.  ** in temp
2ed80 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72  orary storage or
2ed90 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73   if the VFS does
2eda0 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61   not support sha
2edb0 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f  red memory .  */
2edc0 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2edd0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2ede0 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65  AL.   && (sqlite
2edf0 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e  3Strlen30(zFilen
2ee00 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20  ame)==0         
2ee10 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a    /* Temp file *
2ee20 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c  /.       || !sql
2ee30 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70  ite3PagerWalSupp
2ee40 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20  orted(pPager))  
2ee50 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65   /* No shared-me
2ee60 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a  mory support */.
2ee70 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20    ){.    eNew = 
2ee80 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  eOld;.  }..  if(
2ee90 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20   (eNew!=eOld).  
2eea0 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52   && (eOld==PAGER
2eeb0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2eec0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2eed0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29  JOURNALMODE_WAL)
2eee0 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64  .  ){.    if( !d
2eef0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c  b->autoCommit ||
2ef00 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
2ef10 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2ef20 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2ef30 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2ef40 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2ef50 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20   db, .          
2ef60 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
2ef70 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
2ef80 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
2ef90 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
2efa0 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
2efb0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
2efc0 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
2efd0 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
2efe0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c    break;.    }el
2eff0 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
2f000 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2f010 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
2f020 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
2f030 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
2f040 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
2f050 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
2f060 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
2f070 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
2f080 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
2f090 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
2f0a0 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
2f0b0 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
2f0c0 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
2f0d0 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
2f0e0 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
2f0f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2f100 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
2f110 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
2f120 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
2f130 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
2f140 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
2f150 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20  eWal(pPager);.  
2f160 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2f170 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2f180 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
2f190 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2f1a0 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
2f1b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2f1c0 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
2f1d0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f1e0 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
2f1f0 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
2f200 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
2f210 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
2f220 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
2f230 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
2f240 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
2f250 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
2f260 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2f270 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
2f280 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f290 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
2f2a0 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
2f2b0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
2f2c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f2d0 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
2f2e0 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
2f2f0 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
2f300 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
2f310 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
2f320 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
2f330 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
2f340 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
2f350 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
2f360 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
2f370 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2f380 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
2f390 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
2f3a0 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
2f3b0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f3c0 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
2f3d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2f3e0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
2f3f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f400 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
2f410 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20  c ){.    eNew = 
2f420 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77  eOld;.  }.  eNew
2f430 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53   = sqlite3PagerS
2f440 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2f450 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20  ager, eNew);..  
2f460 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
2f470 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p2];.  pOut->f
2f480 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
2f490 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
2f4a0 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
2f4b0 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
2f4c0 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
2f4d0 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
2f4e0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
2f4f0 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
2f500 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
2f510 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
2f520 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2f530 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
2f540 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  g);.  break;.};.
2f550 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2f560 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
2f570 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2f580 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
2f590 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2f5a0 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
2f5b0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
2f5c0 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
2f5d0 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
2f5e0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
2f5f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
2f600 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
2f610 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
2f620 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
2f630 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
2f640 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
2f650 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
2f660 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
2f670 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
2f680 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  {.  assert( p->r
2f690 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2f6a0 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
2f6b0 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
2f6c0 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
2f6d0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
2f6e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2f6f0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
2f700 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
2f710 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
2f720 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
2f730 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
2f740 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
2f750 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
2f760 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
2f770 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
2f780 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
2f790 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
2f7a0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
2f7b0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2f7c0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2f7d0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2f7e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
2f7f0 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
2f800 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
2f810 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
2f820 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2f830 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2f840 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2f850 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2f860 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
2f870 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2f880 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2f890 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
2f8a0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
2f8b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2f8c0 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74  eeIncrVacuum(pBt
2f8d0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2f8e0 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
2f8f0 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72  DONE,2);.  if( r
2f900 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
2f910 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
2f920 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d  p2 - 1;.    rc =
2f930 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
2f940 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2f950 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
2f960 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
2f970 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
2f980 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
2f990 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57  ts to expire.  W
2f9a0 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73  hen an expired s
2f9b0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65  tatement.** is e
2f9c0 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71  xecuted using sq
2f9d0 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20  lite3_step() it 
2f9e0 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f  will either auto
2f9f0 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70  matically.** rep
2fa00 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69  repare itself (i
2fa10 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61  f it was origina
2fa20 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e  lly created usin
2fa30 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
2fa40 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74  e_v2()).** or it
2fa50 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
2fa60 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a  SQLITE_SCHEMA..*
2fa70 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
2fa80 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
2fa90 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
2faa0 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
2fab0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
2fac0 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
2fad0 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
2fae0 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  g statement is e
2faf0 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  xpired..*/.case 
2fb00 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
2fb10 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
2fb20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
2fb30 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2fb40 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
2fb50 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
2fb60 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
2fb70 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2fb80 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2fb90 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
2fba0 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
2fbb0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
2fbc0 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
2fbd0 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
2fbe0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
2fbf0 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
2fc00 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
2fc10 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
2fc20 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
2fc30 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
2fc40 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
2fc50 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
2fc60 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2fc70 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
2fc80 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
2fc90 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
2fca0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
2fcb0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
2fcc0 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
2fcd0 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
2fce0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
2fcf0 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
2fd00 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
2fd10 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
2fd20 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
2fd30 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
2fd40 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
2fd50 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2fd60 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
2fd70 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
2fd80 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
2fd90 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
2fda0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
2fdb0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
2fdc0 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
2fdd0 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
2fde0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
2fdf0 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
2fe00 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
2fe10 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
2fe20 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
2fe30 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
2fe40 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
2fe50 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
2fe60 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
2fe70 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
2fe80 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2fe90 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20  >btreeMask, p1) 
2fea0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
2feb0 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
2fec0 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
2fed0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2fee0 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
2fef0 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
2ff00 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
2ff10 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
2ff20 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
2ff30 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
2ff40 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2ff50 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
2ff60 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2ff70 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2ff80 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65  g, db, "database
2ff90 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
2ffa0 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d  : %s", z);.    }
2ffb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ffc0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ffd0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2ffe0 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
2fff0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
30000 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
30010 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
30020 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
30030 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
30040 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
30050 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
30060 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
30070 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
30080 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
30090 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
300a0 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
300b0 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
300c0 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
300d0 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
300e0 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
300f0 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
30100 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
30110 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
30120 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  the error.** cod
30130 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  e will be set to
30140 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a   SQLITE_LOCKED..
30150 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69  */.case OP_VBegi
30160 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70  n: {.  VTable *p
30170 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20  VTab;.  pVTab = 
30180 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
30190 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
301a0 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62  bBegin(db, pVTab
301b0 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29  );.  if( pVTab )
301c0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
301d0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61  rtErrmsg(p, pVTa
301e0 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65  b->pVtab);.  bre
301f0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30200 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30210 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
30220 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30230 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30240 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
30250 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
30260 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
30270 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
30280 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
30290 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
302a0 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
302b0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
302c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
302d0 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
302e0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
302f0 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
30300 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
30310 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
30320 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
30330 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
30340 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
30350 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
30360 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
30370 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
30380 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
30390 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
303a0 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
303b0 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
303c0 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
303d0 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
303e0 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
303f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
30400 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
30410 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
30420 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
30430 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
30440 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
30450 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
30460 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
30470 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30480 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30490 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
304a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
304b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
304c0 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
304d0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
304e0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
304f0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
30500 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
30510 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
30520 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
30530 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
30540 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
30550 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
30560 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
30570 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
30580 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
30590 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
305a0 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
305b0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
305c0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
305d0 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
305e0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
305f0 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
30600 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
30610 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
30620 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70  bIsReader );.  p
30630 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  Cur = 0;.  pVtab
30640 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56  Cursor = 0;.  pV
30650 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
30660 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  tab->pVtab;.  pM
30670 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
30680 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
30690 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
306a0 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64  rt(pVtab && pMod
306b0 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  ule);.  rc = pMo
306c0 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
306d0 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29  b, &pVtabCursor)
306e0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
306f0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
30700 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c  Vtab);.  if( SQL
30710 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
30720 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
30730 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
30740 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
30750 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
30760 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
30770 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
30780 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72  lize vdbe cursor
30790 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
307a0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
307b0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
307c0 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
307d0 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
307e0 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
307f0 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
30800 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
30810 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
30820 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
30830 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
30840 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30850 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
30860 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
30870 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
30880 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
30890 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
308a0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
308b0 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
308c0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
308d0 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72  ynopsis: iplan=r
308e0 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a  [P3] zplan='P4'.
308f0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
30900 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
30910 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
30920 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
30930 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
30940 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
30950 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
30960 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
30970 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
30980 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
30990 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
309a0 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
309b0 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
309c0 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
309d0 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
309e0 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
309f0 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
30a00 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
30a10 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
30a20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
30a30 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
30a40 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
30a50 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
30a60 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
30a70 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
30a80 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
30a90 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
30aa0 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
30ab0 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
30ac0 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
30ad0 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
30ae0 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
30af0 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
30b00 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
30b10 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
30b20 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
30b30 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
30b40 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
30b50 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
30b60 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
30b70 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
30b80 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
30b90 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
30ba0 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
30bb0 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
30bc0 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
30bd0 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
30be0 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
30bf0 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
30c00 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
30c10 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
30c20 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
30c30 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
30c40 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
30c50 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  ery;.  Mem *pArg
30c60 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  c;.  sqlite3_vta
30c70 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43  b_cursor *pVtabC
30c80 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33  ursor;.  sqlite3
30c90 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
30ca0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
30cb0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
30cc0 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  nt i;.  Mem **ap
30cd0 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d  Arg;..  pQuery =
30ce0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
30cf0 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65  .  pArgc = &pQue
30d00 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20  ry[1];.  pCur = 
30d10 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
30d20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  ];.  assert( mem
30d30 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20  IsValid(pQuery) 
30d40 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
30d50 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75  ACE(pOp->p3, pQu
30d60 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ery);.  assert( 
30d70 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
30d80 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73  r );.  pVtabCurs
30d90 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  or = pCur->pVtab
30da0 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20  Cursor;.  pVtab 
30db0 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  = pVtabCursor->p
30dc0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
30dd0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
30de0 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65  ;..  /* Grab the
30df0 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e   index number an
30e00 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  d argc parameter
30e10 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  s */.  assert( (
30e20 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45  pQuery->flags&ME
30e30 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72  M_Int)!=0 && pAr
30e40 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  gc->flags==MEM_I
30e50 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28  nt );.  nArg = (
30e60 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a  int)pArgc->u.i;.
30e70 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29    iQuery = (int)
30e80 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
30e90 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
30ea0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
30eb0 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b    {.    res = 0;
30ec0 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
30ed0 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69  apArg;.    for(i
30ee0 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b   = 0; i<nArg; i+
30ef0 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  +){.      apArg[
30f00 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
30f10 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e  ;.    }..    p->
30f20 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
30f30 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
30f40 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61  le->xFilter(pVta
30f50 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c  bCursor, iQuery,
30f60 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
30f70 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d  , apArg);.    p-
30f80 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
30f90 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  0;.    sqlite3Vt
30fa0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30fb0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
30fc0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
30fd0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70  ){.      res = p
30fe0 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74  Module->xEof(pVt
30ff0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
31000 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
31010 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
31020 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
31030 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
31040 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
31050 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
31060 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
31070 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31080 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31090 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
310a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
310b0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
310c0 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
310d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
310e0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f  opsis: r[P3]=vco
310f0 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53  lumn(P2).**.** S
31100 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f  tore the value o
31110 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  f the P2-th colu
31120 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77  mn of.** the row
31130 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d   of the virtual-
31140 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a  table that the .
31150 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  ** P1 cursor is 
31160 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f  pointing to into
31170 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
31180 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e  .case OP_VColumn
31190 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
311a0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
311b0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
311c0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
311d0 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69  m *pDest;.  sqli
311e0 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e  te3_context sCon
311f0 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72  text;..  VdbeCur
31200 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
31210 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
31220 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
31230 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
31240 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
31250 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
31260 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
31270 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
31280 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
31290 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
312a0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
312b0 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
312c0 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
312d0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
312e0 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
312f0 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
31300 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31310 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
31320 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
31330 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
31340 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
31350 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
31360 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
31370 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20  f(sContext));.  
31380 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20  sContext.pOut = 
31390 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54  pDest;.  MemSetT
313a0 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
313b0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d  EM_Null);.  rc =
313c0 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
313d0 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  n(pCur->pVtabCur
313e0 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  sor, &sContext, 
313f0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69  pOp->p2);.  sqli
31400 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
31410 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
31420 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73   if( sContext.is
31430 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20  Error ){.    rc 
31440 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  = sContext.isErr
31450 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  or;.  }.  sqlite
31460 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
31470 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f 64  ing(pDest, encod
31480 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52  ing);.  REGISTER
31490 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
314a0 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
314b0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
314c0 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
314d0 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
314e0 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
314f0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
31500 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31510 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31520 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31530 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31540 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31550 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
31560 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  VNext P1 P2 * * 
31570 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  *.**.** Advance 
31580 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31  virtual table P1
31590 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
315a0 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73   in its result s
315b0 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  et and.** jump t
315c0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
315d0 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69  .  Or, if the vi
315e0 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
315f0 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65  reached.** the e
31600 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  nd of its result
31610 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20   set, then fall 
31620 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
31630 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
31640 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78  .*/.case OP_VNex
31650 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  t: {   /* jump *
31660 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
31670 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
31680 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
31690 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
316a0 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  res;.  VdbeCurso
316b0 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20  r *pCur;..  res 
316c0 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  = 0;.  pCur = p-
316d0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
316e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
316f0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
31700 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
31710 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  Row ){.    break
31720 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
31730 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31740 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
31750 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
31760 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
31770 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
31780 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
31790 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
317a0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
317b0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
317c0 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
317d0 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
317e0 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
317f0 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
31800 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
31810 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
31820 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
31830 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
31840 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
31850 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
31860 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
31870 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
31880 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
31890 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
318a0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
318b0 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
318c0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
318d0 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
318e0 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
318f0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
31900 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
31910 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
31920 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
31930 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
31940 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  od = 0;.  sqlite
31950 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
31960 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
31970 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
31980 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
31990 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
319a0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
319b0 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
319c0 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20  Taken(!res,2);. 
319d0 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20   if( !res ){.   
319e0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
319f0 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32  data, jump to P2
31a00 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
31a10 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
31a20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
31a30 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64  nterrupt;.}.#end
31a40 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
31a50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
31a60 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
31a70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31a80 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
31a90 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34  Rename P1 * * P4
31aa0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
31ab0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
31ac0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
31ad0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
31ae0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
31af0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
31b00 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
31b10 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20  ponding xRename 
31b20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75  method. The valu
31b30 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72  e.** in register
31b40 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73   P1 is passed as
31b50 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d   the zName argum
31b60 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61  ent to the xRena
31b70 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61  me method..*/.ca
31b80 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b  se OP_VRename: {
31b90 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
31ba0 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70  *pVtab;.  Mem *p
31bb0 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d  Name;..  pVtab =
31bc0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
31bd0 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d  pVtab;.  pName =
31be0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
31bf0 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62  .  assert( pVtab
31c00 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
31c10 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  me );.  assert( 
31c20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65  memIsValid(pName
31c30 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
31c40 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
31c50 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
31c60 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65  E(pOp->p1, pName
31c70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61  );.  assert( pNa
31c80 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  me->flags & MEM_
31c90 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73  Str );.  testcas
31ca0 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
31cb0 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
31cc0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
31cd0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
31ce0 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61  16BE );.  testca
31cf0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
31d00 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
31d10 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
31d20 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
31d30 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45  ng(pName, SQLITE
31d40 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63  _UTF8);.  if( rc
31d50 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
31d60 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70     rc = pVtab->p
31d70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
31d80 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
31d90 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
31da0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
31db0 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e   pVtab);.    p->
31dc0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
31dd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31de0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
31df0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31e00 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
31e10 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33  VUpdate P1 P2 P3
31e20 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
31e30 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32  is: data=r[P3@P2
31e40 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ].**.** P4 is a 
31e50 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
31e60 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
31e70 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
31e80 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
31e90 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
31ea0 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
31eb0 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d  onding xUpdate m
31ec0 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73  ethod. P2 values
31ed0 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f  .** are contiguo
31ee0 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  us memory cells 
31ef0 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74  starting at P3 t
31f00 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55  o pass to the xU
31f10 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61  pdate .** invoca
31f20 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
31f30 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b  in register (P3+
31f40 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64  P2-1) correspond
31f50 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74  s to the .** p2t
31f60 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
31f70 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73   argv array pass
31f80 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a  ed to xUpdate..*
31f90 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65  *.** The xUpdate
31fa0 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20   method will do 
31fb0 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49  a DELETE or an I
31fc0 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a  NSERT or both..*
31fd0 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c  * The argv[0] el
31fe0 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72  ement (which cor
31ff0 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f  responds to memo
32000 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69  ry cell P3).** i
32010 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61  s the rowid of a
32020 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20   row to delete. 
32030 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e   If argv[0] is N
32040 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20  ULL then no .** 
32050 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e  deletion occurs.
32060 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c    The argv[1] el
32070 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77  ement is the row
32080 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a  id of the new .*
32090 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e  * row.  This can
320a0 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65   be NULL to have
320b0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
320c0 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65  le select the ne
320d0 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20  w .** rowid for 
320e0 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62  itself.  The sub
320f0 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73  sequent elements
32100 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72   in the array ar
32110 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  e .** the values
32120 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
32130 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a  he new row..**.*
32140 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20  * If P2==1 then 
32150 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72  no insert is per
32160 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d  formed.  argv[0]
32170 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
32180 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c  .** a row to del
32190 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ete..**.** P1 is
321a0 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e   a boolean flag.
321b0 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f   If it is set to
321c0 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55   true and the xU
321d0 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73  pdate call.** is
321e0 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
321f0 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  n the value retu
32200 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
32210 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
32220 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74  d() .** is set t
32230 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
32240 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65  he rowid for the
32250 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74   row just insert
32260 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20  ed..**.** P5 is 
32270 74 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e  the error action
32280 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f  s (OE_Replace, O
32290 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72  E_Fail, OE_Ignor
322a0 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70  e, etc) to.** ap
322b0 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65 20  ply in the case 
322c0 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  of a constraint 
322d0 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e  failure on an in
322e0 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a  sert or update..
322f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61  */.case OP_VUpda
32300 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te: {.  sqlite3_
32310 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
32320 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
32330 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
32340 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
32350 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
32360 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
32370 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
32380 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
32390 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  =1        || pOp
323a0 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20  ->p5==OE_Fail   
323b0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
323c0 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20  ollback .       
323d0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41  || pOp->p5==OE_A
323e0 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  bort || pOp->p5=
323f0 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f  =OE_Ignore || pO
32400 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
32410 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e.  );.  assert(
32420 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
32430 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  );.  pVtab = pOp
32440 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
32450 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
32460 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
32470 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
32480 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  .  nArg = pOp->p
32490 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
324a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
324b0 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  B );.  if( ALWAY
324c0 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  S(pModule->xUpda
324d0 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74  te) ){.    u8 vt
324e0 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64  abOnConflict = d
324f0 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
32500 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  t;.    apArg = p
32510 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20  ->apArg;.    pX 
32520 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
32530 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
32540 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
32550 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
32560 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20  Valid(pX) );.   
32570 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
32580 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20  nge(p, pX);.    
32590 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b    apArg[i] = pX;
325a0 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20  .      pX++;.   
325b0 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f   }.    db->vtabO
325c0 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d  nConflict = pOp-
325d0 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  >p5;.    rc = pM
325e0 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
325f0 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
32600 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
32610 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
32620 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c  ct = vtabOnConfl
32630 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ict;.    sqlite3
32640 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
32650 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
32660 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
32670 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
32680 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
32690 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
326a0 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
326b0 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
326c0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
326d0 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
326e0 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  d = rowid;.    }
326f0 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66  .    if( (rc&0xf
32700 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
32710 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34  RAINT && pOp->p4
32720 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61  .pVtab->bConstra
32730 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  int ){.      if(
32740 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e   pOp->p5==OE_Ign
32750 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ore ){.        r
32760 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
32770 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
32780 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
32790 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d  on = ((pOp->p5==
327a0 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45  OE_Replace) ? OE
327b0 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35  _Abort : pOp->p5
327c0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
327d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  else{.      p->n
327e0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Change++;.    }.
327f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
32800 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32810 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
32820 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
32830 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
32840 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
32850 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
32860 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
32870 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
32880 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
32890 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
328a0 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
328b0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
328c0 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
328d0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
328e0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
328f0 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
32900 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
32910 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
32920 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pBt);.  break;.
32930 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
32940 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
32950 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
32960 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e   Opcode: MaxPgcn
32970 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
32980 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20  *.** Try to set 
32990 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
329a0 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62   count for datab
329b0 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61  ase P1 to the va
329c0 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f  lue in P3..** Do
329d0 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78   not let the max
329e0 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
329f0 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63  fall below the c
32a00 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e  urrent page coun
32a10 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20  t and.** do not 
32a20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d  change the maxim
32a30 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61  um page count va
32a40 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a  lue if P3==0..**
32a50 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61  .** Store the ma
32a60 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
32a70 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67   after the chang
32a80 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
32a90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78  ..*/.case OP_Max
32aa0 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Pgcnt: {        
32ab0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
32ac0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69  elease */.  unsi
32ad0 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b  gned int newMax;
32ae0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
32af0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
32b00 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
32b10 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66  newMax = 0;.  if
32b20 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
32b30 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65   newMax = sqlite
32b40 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70  3BtreeLastPage(p
32b50 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77  Bt);.    if( new
32b60 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29  Max < (unsigned)
32b70 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78  pOp->p3 ) newMax
32b80 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   = (unsigned)pOp
32b90 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->p3;.  }.  pOut
32ba0 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
32bb0 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74  treeMaxPageCount
32bc0 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20  (pBt, newMax);. 
32bd0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
32be0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  .../* Opcode: In
32bf0 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  it * P2 * P4 *.*
32c00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61  * Synopsis:  Sta
32c10 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50  rt at P2.**.** P
32c20 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20  rograms contain 
32c30 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
32c40 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  e of this opcode
32c50 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72   as the very fir
32c60 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a  st.** opcode..**
32c70 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
32c80 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
32c90 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
32ca0 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
32cb0 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
32cc0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
32cd0 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
32ce0 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
32cf0 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69  allback..** Or i
32d00 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75  f P4 is blank, u
32d10 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  se the string re
32d20 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
32d30 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  3_sql()..**.** I
32d40 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P2 is not zero
32d50 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
32d60 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
32d70 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20  e OP_Init: {    
32d80 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
32d90 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b  .  char *zTrace;
32da0 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69  .  char *z;..  i
32db0 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  f( pOp->p2 ){.  
32dc0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
32dd0 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20   1;.  }.#ifndef 
32de0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
32df0 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  E.  if( db->xTra
32e00 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69  ce.   && !p->doi
32e10 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a  ngRerun.   && (z
32e20 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
32e30 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
32e40 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
32e50 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
32e60 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
32e70 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
32e80 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
32e90 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
32ea0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
32eb0 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
32ec0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  ef SQLITE_USE_FC
32ed0 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61  NTL_TRACE.  zTra
32ee0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
32ef0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
32f00 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54  >zSql);.  if( zT
32f10 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  race ){.    int 
32f20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
32f30 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
32f40 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61 73  .      if( DbMas
32f50 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
32f60 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74  sk, i)==0 ) cont
32f70 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
32f80 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
32f90 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  (db, db->aDb[i].
32fa0 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  zName, SQLITE_FC
32fb0 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63  NTL_TRACE, zTrac
32fc0 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  e);.    }.  }.#e
32fd0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
32fe0 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a  SE_FCNTL_TRACE *
32ff0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
33000 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d  DEBUG.  if( (db-
33010 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
33020 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20  SqlTrace)!=0.   
33030 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
33040 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
33050 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
33060 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  =0.  ){.    sqli
33070 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
33080 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
33090 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23  , zTrace);.  }.#
330a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
330b0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
330c0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  /* SQLITE_OMIT_T
330d0 52 41 43 45 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  RACE */.  break;
330e0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
330f0 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  Noop * * * * *.*
33100 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e  *.** Do nothing.
33110 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
33120 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66  on is often usef
33130 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20  ul as a jump.** 
33140 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  destination..*/.
33150 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20  /*.** The magic 
33160 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61  Explain opcode a
33170 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64  re only inserted
33180 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32   when explain==2
33190 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f   (which.** is to
331a0 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58   say when the EX
331b0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
331c0 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e   syntax is used.
331d0 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ).** This opcode
331e0 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61   records informa
331f0 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70  tion from the op
33200 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20  timizer.  It is 
33210 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  the.** the same 
33220 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69  as a no-op.  Thi
33230 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61  s opcodesnever a
33240 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c  ppears in a real
33250 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a   VM program..*/.
33260 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20  default: {      
33270 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72      /* This is r
33280 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e  eally OP_Noop an
33290 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a  d OP_Explain */.
332a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
332b0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c  pcode==OP_Noop |
332c0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
332d0 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62  P_Explain );.  b
332e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a  reak;.}../******
332f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33330 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63  *******.** The c
33340 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74  ases of the swit
33350 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  ch statement abo
33360 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f  ve this line sho
33370 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e  uld all be inden
33380 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63  ted.** by 6 spac
33390 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66  es.  But the lef
333a0 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20  t-most 6 spaces 
333b0 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65  have been remove
333c0 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65  d to improve the
333d0 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e  .** readability.
333e0 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e    From this poin
333f0 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e  t on down, the n
33400 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
33410 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72  n rules are.** r
33420 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a  estored..*******
33430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33470 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23  ******/.    }..#
33480 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
33490 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  LE.    {.      u
334a0 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71 6c  64 endTime = sql
334b0 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20 20  ite3Hwtime();.  
334c0 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65 3e      if( endTime>
334d0 73 74 61 72 74 20 29 20 70 4f 70 2d 3e 63 79 63  start ) pOp->cyc
334e0 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d  les += endTime -
334f0 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
33500 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  p->cnt++;.    }.
33510 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54  #endif..    /* T
33520 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
33530 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74  e adds nothing t
33540 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e  o the actual fun
33550 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a  ctionality.    *
33560 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  * of the program
33570 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65  .  It is only he
33580 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  re for testing a
33590 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20  nd debugging..  
335a0 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65    ** On the othe
335b0 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20  r hand, it does 
335c0 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20  burn CPU cycles 
335d0 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75  every time throu
335e0 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76  gh.    ** the ev
335f0 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53  aluator loop.  S
33600 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69  o we can leave i
33610 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55  t out when NDEBU
33620 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
33630 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45    */.#ifndef NDE
33640 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20  BUG.    assert( 
33650 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e  pc>=-1 && pc<p->
33660 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  nOp );..#ifdef S
33670 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
33680 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
33690 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
336a0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
336b0 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63  !=0 ) printf("rc
336c0 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
336d0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
336e0 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32  gs & (OPFLG_OUT2
336f0 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c  _PRERELEASE|OPFL
33700 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20  G_OUT2) ){.     
33710 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
33720 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
33730 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
33740 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70   }.      if( pOp
33750 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
33760 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20  G_OUT3 ){.      
33770 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
33780 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
33790 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
337a0 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20  }.    }.#endif  
337b0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
337c0 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44  */.#endif  /* ND
337d0 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20  EBUG */.  }  /* 
337e0 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  The end of the f
337f0 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20  or(;;) loop the 
33800 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70  loops through op
33810 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  codes */..  /* I
33820 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
33830 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20  point, it means 
33840 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69  that execution i
33850 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a  s finished with.
33860 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66    ** an error of
33870 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f   some kind..  */
33880 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74  .vdbe_error_halt
33890 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29  :.  assert( rc )
338a0 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
338b0 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
338c0 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
338d0 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c  xLog!=0 );.  sql
338e0 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74  ite3_log(rc, "st
338f0 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61  atement aborts a
33900 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20  t %d: [%s] %s", 
33910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33920 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c      pc, p->zSql,
33930 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
33940 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
33950 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
33960 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
33970 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
33980 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
33990 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
339a0 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  if( resetSchemaO
339b0 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20  nFault>0 ){.    
339c0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
339d0 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53  chema(db, resetS
339e0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b  chemaOnFault-1);
339f0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20  .  }..  /* This 
33a00 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
33a10 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63  out of this proc
33a20 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20  edure.  We have 
33a30 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20  to.  ** release 
33a40 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62  the mutexes on b
33a50 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
33a60 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a  acquired at the.
33a70 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62    ** top. */.vdb
33a80 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e  e_return:.  db->
33a90 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
33aa0 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73  Rowid;.  testcas
33ab0 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a  e( nVmStep>0 );.
33ac0 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
33ad0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
33ae0 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74  VM_STEP] += (int
33af0 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69  )nVmStep;.  sqli
33b00 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b  te3VdbeLeave(p);
33b10 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
33b20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
33b30 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
33b40 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
33b50 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
33b60 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
33b70 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
33b80 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
33b90 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
33ba0 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
33bb0 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
33bc0 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
33bd0 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
33be0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
33bf0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
33c00 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
33c10 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
33c20 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
33c30 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
33c40 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
33c50 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
33c60 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
33c70 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
33c80 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
33c90 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
33ca0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
33cb0 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74   here for any ot
33cc0 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61  her kind of fata
33cd0 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72  l error.  The "r
33ce0 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a  c" variable.  **
33cf0 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65   should hold the
33d00 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20   error number.. 
33d10 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
33d20 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74  _error:.  assert
33d30 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20  ( p->zErrMsg==0 
33d40 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
33d50 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d  locFailed ) rc =
33d60 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
33d70 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
33d80 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  IOERR_NOMEM ){. 
33d90 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
33da0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
33db0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
33dc0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
33dd0 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65   }.  goto vdbe_e
33de0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
33df0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
33e00 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74   the sqlite3_int
33e10 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74  errupt() API set
33e20 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a  s the interrupt.
33e30 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a    ** flag..  */.
33e40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
33e50 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74  errupt:.  assert
33e60 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
33e70 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d  rupted );.  rc =
33e80 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
33e90 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  T;.  p->rc = rc;
33ea0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
33eb0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
33ec0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
33ed0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
33ee0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
33ef0 5f 68 61 6c 74 3b 0a 7d 0a                       _halt;.}.