/ Hex Artifact Content
Login

Artifact cba6c791a3621de633cc018f09c81aa472072d42:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  taken..*/.#if !d
1090: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
10a0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
10b0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
10c0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
10d0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
10e0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
10f0: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1100: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1110: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1120: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e  dbeTakeBranch(in
1130: 74 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  t iSrcLine, u8 I
1140: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28  , u8 M){.    if(
1150: 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20   iSrcLine<=2 && 
1160: 41 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e  ALWAYS(iSrcLine>
1170: 30 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20  0) ){.      M = 
1180: 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20  iSrcLine;.      
1190: 2f 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72  /* Assert the tr
11a0: 75 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72  uth of VdbeCover
11b0: 61 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29  ageAlwaysTaken()
11c0: 20 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56   and .      ** V
11d0: 64 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72  dbeCoverageNever
11e0: 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20  Taken() */.     
11f0: 20 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29   assert( (M & I)
1200: 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==I );.    }else
1210: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
1220: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1230: 78 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29  xVdbeBranch==0 )
1240: 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54   return;  /*NO_T
1250: 45 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  EST*/.      sqli
1260: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1270: 78 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69  xVdbeBranch(sqli
1280: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1290: 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a  pVdbeBranchArg,.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49        iSrcLine,I
12d0: 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ,M);.    }.  }.#
12e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
12f0: 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72  vert the given r
1300: 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73  egister into a s
1310: 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27  tring if it isn'
1320: 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79  t one.** already
1330: 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  . Return non-zer
1340: 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  o if a malloc() 
1350: 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fails..*/.#defin
1360: 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65  e Stringify(P, e
1370: 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29  nc) \.   if(((P)
1380: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72  ->flags&(MEM_Str
1390: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26  |MEM_Blob))==0 &
13a0: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
13b0: 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29  Stringify(P,enc)
13c0: 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20  ) \.     { goto 
13d0: 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  no_mem; }../*.**
13e0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   An ephemeral st
13f0: 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e  ring value (sign
1400: 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d  ified by the MEM
1410: 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e  _Ephem flag) con
1420: 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74  tains.** a point
1430: 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61  er to a dynamica
1440: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74  lly allocated st
1450: 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20  ring where some 
1460: 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20  other entity.** 
1470: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
1480: 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  or deallocating 
1490: 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65  that string.  Be
14a0: 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74  cause the regist
14b0: 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63  er.** does not c
14c0: 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e  ontrol the strin
14d0: 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64  g, it might be d
14e0: 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74  eleted without t
14f0: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b  he register.** k
1500: 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a  nowing it..**.**
1510: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f   This routine co
1520: 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65  nverts an epheme
1530: 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ral string into 
1540: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1550: 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e  located.** strin
1560: 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73  g that the regis
1570: 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72  ter itself contr
1580: 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ols.  In other w
1590: 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76  ords, it.** conv
15a0: 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65  erts an MEM_Ephe
15b0: 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  m string into a 
15c0: 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d  string with P.z=
15d0: 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23  =P.zMalloc..*/.#
15e0: 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72  define Deephemer
15f0: 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66  alize(P) \.   if
1600: 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45  ( ((P)->flags&ME
1610: 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20  M_Ephem)!=0 \.  
1620: 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56       && sqlite3V
1630: 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
1640: 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e  ble(P) ){ goto n
1650: 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75  o_mem;}../* Retu
1660: 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63  rn true if the c
1670: 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64  ursor was opened
1680: 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70   using the OP_Op
1690: 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e  enSorter opcode.
16a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f   */.#define isSo
16b0: 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53  rter(x) ((x)->pS
16c0: 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  orter!=0)../*.**
16d0: 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75   Allocate VdbeCu
16e0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72  rsor number iCur
16f0: 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  .  Return a poin
1700: 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75  ter to it.  Retu
1710: 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65  rn NULL.** if we
1720: 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f   run out of memo
1730: 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64  ry..*/.static Vd
1740: 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61  beCursor *alloca
1750: 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65  teCursor(.  Vdbe
1760: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20   *p,            
1770: 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c    /* The virtual
1780: 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e   machine */.  in
1790: 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20  t iCur,         
17a0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
17b0: 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73  the new VdbeCurs
17c0: 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  or */.  int nFie
17d0: 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ld,           /*
17e0: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
17f0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  s in the table o
1800: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
1810: 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20   iDb,           
1820: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
1830: 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67  he cursor belong
1840: 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20  s to, or -1 */. 
1850: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1860: 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66  or     /* True f
1870: 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73  or B-Tree.  Fals
1880: 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
1890: 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b  le or vtab */.){
18a0: 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d  .  /* Find the m
18b0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
18c0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  will be used to 
18d0: 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f  store the blob o
18e0: 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65  f memory.  ** re
18f0: 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
1900: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1910: 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76  ture. It is conv
1920: 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20  enient to use a 
1930: 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72  .  ** vdbe memor
1940: 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65  y cell to manage
1950: 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   the memory allo
1960: 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20  cation required 
1970: 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43  for a.  ** VdbeC
1980: 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20  ursor structure 
1990: 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
19a0: 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a  g reasons:.  **.
19b0: 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d    **   * Sometim
19c0: 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  es cursor number
19d0: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
19e0: 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65   couple of diffe
19f0: 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75  rent.  **     pu
1a00: 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65  rposes in a vdbe
1a10: 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69   program. The di
1a20: 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67  fferent uses mig
1a30: 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20  ht require.  ** 
1a40: 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69      different si
1a50: 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e  zed allocations.
1a60: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72   Memory cells pr
1a70: 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20  ovide growable. 
1a80: 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69   **     allocati
1a90: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ons..  **.  **  
1aa0: 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e   * When using EN
1ab0: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
1ac0: 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63  GEMENT, memory c
1ad0: 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a  ell buffers can.
1ae0: 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65    **     be free
1af0: 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65  d lazily via the
1b00: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
1b10: 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54  _memory() API. T
1b20: 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e  his.  **     min
1b30: 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65  imizes the numbe
1b40: 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c  r of malloc call
1b50: 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79  s made by the sy
1b60: 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  stem..  **.  ** 
1b70: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72  Memory cells for
1b80: 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c   cursors are all
1b90: 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f  ocated at the to
1ba0: 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73  p of the address
1bb0: 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d  .  ** space. Mem
1bc0: 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65  ory cell (p->nMe
1bd0: 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  m) corresponds t
1be0: 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63  o cursor 0. Spac
1bf0: 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f  e for.  ** curso
1c00: 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62  r 1 is managed b
1c10: 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  y memory cell (p
1c20: 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a  ->nMem-1), etc..
1c30: 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d    */.  Mem *pMem
1c40: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e   = &p->aMem[p->n
1c50: 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e  Mem-iCur];..  in
1c60: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1c70: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1c80: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1c90: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1ca0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1cb0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1cc0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  ld + .      (isB
1cd0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1ce0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1cf0: 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72  e():0);..  asser
1d00: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
1d10: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
1d20: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
1d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1d40: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1d50: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
1d60: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1d70: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
1d80: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
1d90: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
1da0: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
1db0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
1dc0: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
1dd0: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
1de0: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
1df0: 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75  0, sizeof(VdbeCu
1e00: 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d  rsor));.    pCx-
1e10: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
1e20: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
1e30: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73  ield;.    if( is
1e40: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1e50: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1e60: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1e70: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
1e80: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
1e90: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
1ea0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1eb0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
1ec0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
1ed0: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
1ee0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
1ef0: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
1f00: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
1f10: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
1f20: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
1f30: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
1f40: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
1f50: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
1f60: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
1f70: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
1f80: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
1f90: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
1fa0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
1fb0: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
1fc0: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
1fd0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
1fe0: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
1ff0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2000: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2010: 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20  ty(Mem *pRec){. 
2020: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2030: 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  s & (MEM_Real|ME
2040: 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20  M_Int))==0 ){.  
2050: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2060: 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65 3b  .    i64 iValue;
2070: 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70 52  .    u8 enc = pR
2080: 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66 28  ec->enc;.    if(
2090: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45   (pRec->flags&ME
20a0: 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75  M_Str)==0 ) retu
20b0: 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  rn;.    if( sqli
20c0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
20d0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
20e0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
20f0: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  urn;.    if( 0==
2100: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
2110: 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20  ec->z, &iValue, 
2120: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b  pRec->n, enc) ){
2130: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69  .      pRec->u.i
2140: 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 20   = iValue;.     
2150: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2160: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65 6c  MEM_Int;.    }el
2170: 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e  se{.      pRec->
2180: 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20  r = rValue;.    
2190: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
21a0: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 7d   MEM_Real;.    }
21b0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
21c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
21d0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
21e0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
21f0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2200: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2210: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2220: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2230: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2240: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2250: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2260: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2270: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2280: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2290: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
22a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
22b0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
22c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
22d0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
22e0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
22f0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
2300: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2310: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2320: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2330: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2340: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2350: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2360: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2370: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2380: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2390: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
23a0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
23b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
23c0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
23d0: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
23e0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
23f0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2400: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2410: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2420: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2430: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2440: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2450: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2460: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2470: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2480: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2490: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
24a0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
24b0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
24c0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
24d0: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
24e0: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
24f0: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
2500: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
2510: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2520: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2530: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2540: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2550: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2560: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
2570: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2580: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
2590: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
25a0: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
25b0: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
25c0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
25d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
25e0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
25f0: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
2600: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2610: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2620: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2630: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2640: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2650: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2660: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2670: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2680: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2690: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
26a0: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
26b0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
26c0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
26d0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
26e0: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
26f0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2700: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2710: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2720: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2730: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2740: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2750: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2760: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2770: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2780: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2790: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
27a0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
27b0: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
27c0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
27d0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
27e0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
27f0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2800: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2810: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2820: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2830: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2840: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2850: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2860: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2870: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2880: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2890: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
28a0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
28b0: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
28c0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
28d0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
28e0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
28f0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2900: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2910: 6d 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20  m);.    eType = 
2920: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
2930: 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20  pe(pVal);.  }.  
2940: 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a  return eType;.}.
2950: 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20  ./*.** Exported 
2960: 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79  version of apply
2970: 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73  Affinity(). This
2980: 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71   one works on sq
2990: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a  lite3_value*, .*
29a0: 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e  * not the intern
29b0: 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f  al Mem* type..*/
29c0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
29d0: 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
29e0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
29f0: 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66   *pVal, .  u8 af
2a00: 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e  finity, .  u8 en
2a10: 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69  c.){.  applyAffi
2a20: 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c  nity((Mem *)pVal
2a30: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29  , affinity, enc)
2a40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
2a50: 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  n the numeric ty
2a60: 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74  pe for pMem, eit
2a70: 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d  her MEM_Int or M
2a80: 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20  EM_Real or both 
2a90: 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a  or.** none.  .**
2aa0: 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79  .** Unlike apply
2ab0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2ac0: 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ), this routine 
2ad0: 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20  does not modify 
2ae0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20  pMem->flags..** 
2af0: 42 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  But it does set 
2b00: 70 4d 65 6d 2d 3e 72 20 61 6e 64 20 70 4d 65 6d  pMem->r and pMem
2b10: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
2b20: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
2b30: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
2b40: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
2b50: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
2b60: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2b70: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
2b80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2b90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2ba0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
2bb0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
2bc0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
2bd0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
2be0: 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d  toF(pMem->z, &pM
2bf0: 65 6d 2d 3e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  em->r, pMem->n, 
2c00: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
2c10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
2c20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
2c30: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65  qlite3Atoi64(pMe
2c40: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69  m->z, &pMem->u.i
2c50: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
2c60: 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  >enc)==SQLITE_OK
2c70: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
2c80: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
2c90: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52      return MEM_R
2ca0: 65 61 6c 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  eal;.  }.  retur
2cb0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
2cc0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2cd0: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2ce0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2cf0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2d00: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2d10: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2d20: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2d30: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2d40: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2d50: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2d60: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2d70: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2d80: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2d90: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2da0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2db0: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2dc0: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2dd0: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2de0: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2df0: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2e00: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2e10: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2e20: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2e30: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2e40: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2e50: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2e60: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2e70: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2e80: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2e90: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2ea0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2eb0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2ec0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2ed0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2ee0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2ef0: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2f00: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2f10: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2f20: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
2f30: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
2f40: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
2f50: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
2f60: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
2f70: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2f80: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
2f90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
2fa0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2fb0: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
2fc0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2fd0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2fe0: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
2ff0: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3000: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3010: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3020: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3030: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3040: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3050: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3060: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3070: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3080: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3090: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
30a0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
30b0: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
30c0: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
30d0: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
30e0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
30f0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3100: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3110: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3120: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3130: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3140: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3150: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3160: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
3170: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3180: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3190: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
31a0: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
31b0: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
31c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
31d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
31e0: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
31f0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3200: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3210: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3220: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3230: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3240: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
3250: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
3260: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3270: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3280: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3290: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
32a0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
32b0: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
32c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
32d0: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
32e0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
32f0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3300: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3310: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3320: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3330: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3340: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
3350: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3360: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
3370: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3380: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3390: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
33a0: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
33b0: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
33c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
33d0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
33e0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
33f0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3400: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3410: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3420: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3430: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
3440: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
3450: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
3460: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
3470: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3480: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3490: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
34a0: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
34b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34c0: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
34d0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
34e0: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
34f0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3500: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3510: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3520: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3530: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3540: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3550: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3560: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3570: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3580: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3590: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
35a0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35b0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
35c0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
35d0: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
35e0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
35f0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3600: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3610: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3620: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3630: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3640: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3650: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3660: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3670: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3680: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3690: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
36a0: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3700: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3710: 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  ->r);.#endif.  }
3720: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3730: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3740: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3750: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3760: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3770: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3780: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3790: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
37a0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
37b0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
37c0: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
37d0: 74 65 72 54 72 61 63 65 28 69 6e 74 20 69 52 65  terTrace(int iRe
37e0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72  g, Mem *p){.  pr
37f0: 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20  intf("REG[%d] = 
3800: 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54  ", iReg);.  memT
3810: 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20  racePrint(p);.  
3820: 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a  printf("\n");.}.
3830: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3840: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
3850: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3860: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d  RACE(R,M) if(db-
3870: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64  >flags&SQLITE_Vd
3880: 62 65 54 72 61 63 65 29 72 65 67 69 73 74 65 72  beTrace)register
3890: 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65  Trace(R,M).#else
38a0: 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53  .#  define REGIS
38b0: 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23  TER_TRACE(R,M).#
38c0: 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56  endif...#ifdef V
38d0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20  DBE_PROFILE../* 
38e0: 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e  .** hwtime.h con
38f0: 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73  tains inline ass
3900: 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20  embler code for 
3910: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a  implementing .**
3920: 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63   high-performanc
3930: 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65  e timing routine
3940: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
3950: 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69  hwtime.h"..#endi
3960: 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  f..#ifndef NDEBU
3970: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3980: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3990: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
39a0: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
39b0: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
39c0: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
39d0: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
39e0: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
39f0: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3a00: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3a10: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3a20: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3a30: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3a40: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3a50: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3a60: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3a70: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3a80: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3a90: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3aa0: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3ab0: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3ac0: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3ad0: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3ae0: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3af0: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3b00: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3b10: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3b20: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3b30: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3b40: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3b50: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3b60: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3b70: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65  ndif.../*.** Exe
3b80: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
3b90: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
3ba0: 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69  s we can..** Thi
3bb0: 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66  s is the core of
3bc0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
3bd0: 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65    .*/.int sqlite
3be0: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
3bf0: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
3c00: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
3c10: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
3c20: 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20  pc=0;           
3c30: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
3c40: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
3c50: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
3c60: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
3c70: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
3c80: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ca0: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
3cb0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
3cc0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
3cd0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
3ce0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
3cf0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
3d00: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
3d10: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
3d20: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
3d30: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
3d40: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
3d50: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
3d60: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
3d70: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
3d80: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
3d90: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
3da0: 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20   int iCompare = 
3db0: 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  0;          /* R
3dc0: 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50  esult of last OP
3dd0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69  _Compare operati
3de0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
3df0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
3e00: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3e10: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
3e20: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
3e30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
3e40: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
3e50: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
3e60: 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20  essLimit = 0;/* 
3e70: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
3e80: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
3e90: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
3ea0: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
3eb0: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
3ec0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
3ed0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
3ee0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
3ef0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
3f00: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
3f10: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
3f30: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
3f40: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
3f50: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
3f60: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
3f70: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
3f80: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
3f90: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
3fa0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
3fb0: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
3fc0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
3fd0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
3fe0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
3ff0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
4000: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
4010: 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76  wid;  /* Saved v
4020: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74  alue of the last
4030: 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f   insert ROWID */
4040: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4050: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4060: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4070: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4080: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4090: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
40a0: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
40b0: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
40c0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
40d0: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
40e0: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
40f0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4100: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4110: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4120: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4130: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4140: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4150: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4160: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4170: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4180: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4190: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
41a0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
41b0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
41c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
41d0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
41e0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
41f0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4200: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
4210: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
4220: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
4230: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4240: 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72  E_OK;.  p->iCurr
4250: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
4260: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
4270: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
4280: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
4290: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
42a0: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
42b0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
42c0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
42d0: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
42e0: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
42f0: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4300: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4310: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4320: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
4330: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
4340: 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d   assert( 0 < db-
4350: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b  >nProgressOps );
4360: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
4370: 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  mit = (unsigned)
4380: 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
4390: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
43a0: 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66 28 20  _STEP];.    if( 
43b0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d  nProgressLimit==
43c0: 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67  0 ){.      nProg
43d0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e  ressLimit = db->
43e0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20  nProgressOps;.  
43f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
4400: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 25 3d  ProgressLimit %=
4410: 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e   (unsigned)db->n
4420: 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20  ProgressOps;.   
4430: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69   }.  }.#endif.#i
4440: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4450: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
4460: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4470: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20    if( p->pc==0. 
4480: 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61    && (p->db->fla
4490: 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62  gs & (SQLITE_Vdb
44a0: 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f  eListing|SQLITE_
44b0: 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56  VdbeEQP|SQLITE_V
44c0: 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20  dbeTrace))!=0.  
44d0: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
44e0: 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a    int once = 1;.
44f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4500: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4510: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
4520: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
4530: 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70  sting ){.      p
4540: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
4550: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
4560: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
4570: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4580: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4590: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
45a0: 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b  ut, i, &aOp[i]);
45b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
45c0: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
45d0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
45e0: 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f  eEQP ){.      fo
45f0: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
4600: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
4610: 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65  f( aOp[i].opcode
4620: 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a  ==OP_Explain ){.
4630: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e            if( on
4640: 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44 42  ce ) printf("VDB
4650: 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22  E Query Plan:\n"
4660: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  );.          pri
4670: 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b  ntf("%s\n", aOp[
4680: 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  i].p4.z);.      
4690: 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20      once = 0;.  
46a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
46b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
46c0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
46d0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 20  ITE_VdbeTrace ) 
46e0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54 72   printf("VDBE Tr
46f0: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  ace:\n");.  }.  
4700: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4710: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4720: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4730: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4740: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4750: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4760: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4770: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4780: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4790: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
47a0: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
47b0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
47c0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
47d0: 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70 20  Step++;.    pOp 
47e0: 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20  = &aOp[pc];..   
47f0: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
4800: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
4810: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
4820: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
4830: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4840: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
4850: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
4860: 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ce ){.      sqli
4870: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
4880: 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70 29 3b  tdout, pc, pOp);
4890: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
48a0: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
48b0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
48c0: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
48d0: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
48e0: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
48f0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
4900: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
4910: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
4920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
4930: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
4940: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
4950: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
4960: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4970: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
4980: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
4990: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
49a0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
49b0: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
49c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
49d0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
49e0: 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68   any opcode with
49f0: 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65   the "out2-prere
4a00: 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  lease" tag, free
4a10: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
4a20: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
4a30: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
4a40: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
4a50: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
4a60: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
4a70: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
4a80: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
4a90: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
4aa0: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
4ab0: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
4ac0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
4ad0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
4ae0: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
4af0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
4b00: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
4b10: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
4b20: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
4b30: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
4b40: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
4b50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
4b60: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4b70: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
4b80: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
4b90: 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26  ;.      pOut = &
4ba0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
4bb0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
4bc0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
4bd0: 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c        VdbeMemRel
4be0: 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  ease(pOut);.    
4bf0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
4c00: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a  MEM_Int;.    }..
4c10: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
4c20: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
4c30: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
4c40: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4c50: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
4c60: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
4c70: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
4c80: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
4c90: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
4ca0: 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  ( pOp->p1<=(p->n
4cb0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
4cc0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4cd0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
4ce0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
4cf0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
4d00: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
4d10: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
4d20: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
4d30: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
4d40: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65  CE(pOp->p1, &aMe
4d50: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20  m[pOp->p1]);.   
4d60: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
4d70: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
4d80: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
4d90: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4da0: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
4db0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
4dc0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4dd0: 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  r) );.      asse
4de0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
4df0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
4e00: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4e10: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
4e20: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
4e30: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
4e40: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
4e50: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
4e60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
4e70: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
4e80: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
4e90: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
4ea0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4eb0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
4ec0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
4ed0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
4ee0: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
4ef0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
4f00: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
4f10: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
4f20: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
4f30: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
4f40: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
4f50: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
4f60: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
4f70: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
4f80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4f90: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
4fa0: 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20   OPFLG_OUT2)!=0 
4fb0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4fc0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4fd0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4fe0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
4ff0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5000: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5010: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5020: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5030: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5040: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
5050: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5060: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5070: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5080: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
5090: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
50a0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
50b0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
50c0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
50d0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20   }.#endif.  .   
50e0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
50f0: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5140: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5150: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5160: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5170: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5180: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5190: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
51a0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
51b0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
51c0: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
51d0: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
51e0: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
51f0: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5200: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5210: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5220: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5230: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5240: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5250: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5260: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5270: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5280: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5290: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
52a0: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
52b0: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
52c0: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
52d0: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
52e0: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
52f0: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5300: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5310: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5320: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5330: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5340: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5350: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5360: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5370: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5380: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5390: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
53a0: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
53b0: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
53c0: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
53d0: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
53e0: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
53f0: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5400: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5410: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5420: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5430: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5440: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5450: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5460: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5470: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5480: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5490: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
54a0: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
54b0: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
54c0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
54d0: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
54e0: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
54f0: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5500: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5510: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5520: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5530: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5540: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5550: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5560: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5570: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5580: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5590: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
55a0: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
55b0: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
55c0: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
55d0: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
55e0: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
55f0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5600: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5610: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5620: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5630: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
5640: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
5650: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5660: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5670: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5680: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5690: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
56a0: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
56b0: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
56c0: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
56d0: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
56e0: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
56f0: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
5700: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
5710: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
5720: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
5730: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
5740: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
5750: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
5760: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
5770: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
5780: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
5790: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
57a0: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
57b0: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
57c0: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
57d0: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
57e0: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
57f0: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
5800: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
5810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
5860: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
5870: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
5880: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
5890: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
58a0: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
58b0: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
58c0: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
58d0: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
58e0: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
58f0: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
5900: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
5910: 54 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  The P1 parameter
5920: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
5930: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
5940: 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  code.  However, 
5950: 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d  it.** is sometim
5960: 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74  es set to 1 inst
5970: 65 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69  ead of 0 as a hi
5980: 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  nt to the comman
5990: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20  d-line shell.** 
59a0: 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69  that this Goto i
59b0: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
59c0: 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20  a loop and that 
59d0: 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50  the lines from P
59e0: 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65  2 down.** to the
59f0: 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68   current line sh
5a00: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
5a10: 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
5a20: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
5a30: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
5a40: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
5a50: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
5a60: 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  1;..  /* Opcodes
5a70: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
5a80: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
5a90: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
5aa0: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
5ab0: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
5ac0: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
5ad0: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
5ae0: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
5af0: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
5b00: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
5b10: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5b20: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
5b30: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
5b40: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5b50: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
5b60: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
5b70: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
5b80: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
5b90: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
5ba0: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
5bb0: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
5bc0: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
5bd0: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
5be0: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
5bf0: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
5c00: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
5c10: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
5c20: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
5c30: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
5c40: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
5c50: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
5c60: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
5c70: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
5c80: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
5c90: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
5ca0: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
5cb0: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
5cc0: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
5cd0: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
5ce0: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
5cf0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5d00: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5d10: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
5d20: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
5d30: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
5d40: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
5d50: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5d60: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
5d70: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5d80: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
5d90: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
5da0: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
5db0: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
5dc0: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
5dd0: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
5de0: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
5df0: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
5e00: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
5e10: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
5e20: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
5e30: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5e40: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
5e50: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
5e60: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5e70: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
5e80: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5e90: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
5ea0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
5eb0: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
5ec0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
5ed0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
5ee0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
5ef0: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
5f00: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
5f10: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
5f20: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
5f30: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
5f40: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
5f50: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
5f60: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
5f70: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
5f80: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
5f90: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5fa0: 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  halt;.    }.  }.
5fb0: 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61  #endif.  .  brea
5fc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
5fd0: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
5fe0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
5ff0: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
6000: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
6010: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
6020: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6030: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6040: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
6050: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
6060: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6070: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
6080: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
6090: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
60a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
60b0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
60c0: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
60d0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
60e0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
60f0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6100: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6110: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6120: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6130: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6140: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6150: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6160: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6170: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6180: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
6190: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
61a0: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
61b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
61c0: 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a    After.** the j
61d0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
61e0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
61f0: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ed..*/.case OP_R
6200: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6210: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6220: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6230: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6240: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6250: 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28  _Int );.  pc = (
6260: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6270: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6280: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6290: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
62a0: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
62b0: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
62c0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
62d0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
62e0: 20 69 74 20 77 69 6c 6c 20 4f 50 5f 59 69 65 6c   it will OP_Yiel
62f0: 64 20 74 6f 20 74 68 65 20 63 6f 2d 72 6f 75 74  d to the co-rout
6300: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
6310: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
6320: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
6330: 6e 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  n the co-routine
6340: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6350: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6360: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6370: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6380: 72 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  r the co-routine
6390: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
63a0: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
63b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69  ..*/.case OP_Ini
63c0: 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  tCoroutine: {   
63d0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
63e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
63f0: 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70   &&  pOp->p1<=(p
6400: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
6410: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
6420: 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f  pOp->p2>=0 && pO
6430: 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
6440: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6450: 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
6460: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74  p->nOp );.  pOut
6470: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6480: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64  ];.  assert( !Vd
6490: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
64a0: 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  t) );.  pOut->u.
64b0: 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  i = pOp->p3 - 1;
64c0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
64d0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20   MEM_Int;.  if( 
64e0: 70 4f 70 2d 3e 70 32 20 29 20 70 63 20 3d 20 70  pOp->p2 ) pc = p
64f0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
6500: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6510: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
6520: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6530: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
6540: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
6550: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
6560: 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 2e 0a  is an OP_Yield..
6570: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6580: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6590: 68 61 74 20 4f 50 5f 59 69 65 6c 64 2e 0a 2a 2a  hat OP_Yield..**
65a0: 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c   After the jump,
65b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
65c0: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
65d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
65e0: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
65f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6600: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
6610: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6620: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6630: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6640: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
6650: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
6660: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
6670: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
6680: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
6690: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
66a0: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
66b0: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
66c0: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
66d0: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
66e0: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
66f0: 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65 72 2d  .  pc = pCaller-
6700: 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e 31 2d  >p2 - 1;.  pIn1-
6710: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6720: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6730: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6740: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
6750: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6760: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6770: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6780: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
6790: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 2d  **.** If the co-
67a0: 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69 74  routine ends wit
67b0: 68 20 4f 50 5f 59 69 65 6c 64 20 6f 72 20 4f 50  h OP_Yield or OP
67c0: 5f 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e  _Return then con
67d0: 74 69 6e 75 65 0a 2a 2a 20 74 6f 20 74 68 65 20  tinue.** to the 
67e0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
67f0: 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 6f  .  But if the co
6800: 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69  -routine ends wi
6810: 74 68 0a 2a 2a 20 4f 50 5f 45 6e 64 43 6f 72 6f  th.** OP_EndCoro
6820: 75 74 69 6e 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  utine, jump imme
6830: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
6840: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
6850: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6860: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
6870: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
6880: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6890: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
68a0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
68b0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
68c0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
68d0: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
68e0: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
68f0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
6900: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6910: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6920: 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a  .  pc = pcDest;.
6930: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6940: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
6950: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
6960: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
6970: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
6980: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
6990: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
69a0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
69b0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
69c0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
69d0: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
69e0: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
69f0: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
6a00: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
6a10: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
6a20: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
6a30: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
6a40: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
6a50: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
6a60: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
6a70: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
6a80: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
6a90: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
6aa0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
6ab0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
6ac0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
6ad0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
6ae0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
6af0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
6b00: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
6b10: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
6b20: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
6b30: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
6b40: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
6b50: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
6b60: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
6b70: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
6b80: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
6b90: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
6ba0: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
6bb0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
6bc0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6bd0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
6be0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
6bf0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
6c00: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
6c10: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
6c20: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
6c30: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
6c40: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
6c50: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
6c60: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
6c70: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
6c80: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
6c90: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
6ca0: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
6cb0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
6cc0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
6cd0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
6ce0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
6cf0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
6d00: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
6d10: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
6d20: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
6d30: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
6d40: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
6d50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
6d60: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
6d70: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
6d80: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
6d90: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
6da0: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
6db0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
6dc0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
6dd0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
6de0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
6df0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
6e00: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
6e10: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
6e20: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
6e30: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
6e40: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
6e50: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
6e60: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6e70: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
6e80: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
6e90: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
6ea0: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
6eb0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
6ec0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
6ed0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
6ee0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
6ef0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
6f00: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
6f10: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
6f20: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
6f30: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
6f40: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
6f50: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
6f60: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
6f70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
6f80: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
6f90: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
6fa0: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
6fb0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
6fc0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6fd0: 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Type;.  const ch
6fe0: 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20  ar *zLogFmt;..  
6ff0: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
7000: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
7010: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
7020: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
7030: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
7040: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
7050: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
7060: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
7070: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
7080: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
7090: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
70a0: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
70b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
70c0: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
70d0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
70e0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
70f0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
7100: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
7110: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
7120: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
7130: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
7140: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
7150: 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65  uction pc is the
7160: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7170: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7180: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7190: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
71a0: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
71b0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
71c0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
71d0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
71e0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
71f0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7200: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7210: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7220: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7230: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7240: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7250: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7260: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7270: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7280: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7290: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20  m.  */.      pc 
72a0: 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d  = p->aOp[pc].p2-
72b0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70  1;.    }.    aOp
72c0: 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61   = p->aOp;.    a
72d0: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
72e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
72f0: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
7300: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
7310: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
7320: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  .  p->pc = pc;. 
7330: 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20   if( p->rc ){.  
7340: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
7350: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
7360: 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  nst char * const
7370: 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e   azType[] = { "N
7380: 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55  OT NULL", "UNIQU
7390: 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20  E", "CHECK",.   
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73c0: 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49            "FOREI
73d0: 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20  GN KEY" };.     
73e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
73f0: 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d  >=1 && pOp->p5<=
7400: 34 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  4 );.      testc
7410: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
7420: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7430: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
7440: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7450: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
7460: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7470: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
7480: 20 20 20 7a 54 79 70 65 20 3d 20 61 7a 54 79 70     zType = azTyp
7490: 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20  e[pOp->p5-1];.  
74a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
74b0: 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Type = 0;.    }.
74c0: 20 20 20 20 61 73 73 65 72 74 28 20 7a 54 79 70      assert( zTyp
74d0: 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  e!=0 || pOp->p4.
74e0: 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67  z!=0 );.    zLog
74f0: 46 6d 74 20 3d 20 22 61 62 6f 72 74 20 61 74 20  Fmt = "abort at 
7500: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b  %d in [%s]: %s";
7510: 0a 20 20 20 20 69 66 28 20 7a 54 79 70 65 20 26  .    if( zType &
7520: 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
7530: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
7540: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
7550: 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74  g, db, "%s const
7560: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73  raint failed: %s
7570: 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
7580: 20 20 20 20 20 20 20 20 20 20 20 7a 54 79 70 65             zType
7590: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
75a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
75b0: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73  >p4.z ){.      s
75c0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
75d0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
75e0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
75f0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
7600: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
7610: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
7620: 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72  , db, "%s constr
7630: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a 54  aint failed", zT
7640: 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ype);.    }.    
7650: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
7660: 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63  >p1, zLogFmt, pc
7670: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
7680: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
7690: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
76a0: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
76b0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
76c0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
76d0: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
76e0: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
76f0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
7700: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63  {.    p->rc = rc
7710: 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
7720: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
7730: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7740: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
7750: 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
7760: 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73  RAINT );.    ass
7770: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7780: 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  OK || db->nDefer
7790: 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d  redCons>0 || db-
77a0: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
77b0: 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  s>0 );.    rc = 
77c0: 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45  p->rc ? SQLITE_E
77d0: 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f  RROR : SQLITE_DO
77e0: 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  NE;.  }.  goto v
77f0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
7800: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65  * Opcode: Intege
7810: 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
7820: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7830: 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  =P1.**.** The 32
7840: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
7850: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
7860: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7870: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
7880: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
7890: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
78a0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
78b0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
78c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
78d0: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
78e0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
78f0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
7900: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
7910: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
7920: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
7930: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
7940: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
7950: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7960: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
7970: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7980: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7990: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
79a0: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
79b0: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
79c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
79d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
79e0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
79f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
7a00: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
7a10: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
7a20: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
7a30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7a40: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
7a50: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
7a60: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
7a70: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7a80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
7a90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
7aa0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
7ab0: 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  AT, out2-prerele
7ac0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
7ad0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
7ae0: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
7af0: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
7b00: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
7b10: 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ut->r = *pOp->p4
7b20: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
7b30: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
7b40: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
7b50: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
7b60: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
7b70: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
7b80: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
7b90: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
7ba0: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
7bb0: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
7bc0: 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74  ** into an OP_St
7bd0: 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69  ring before it i
7be0: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
7bf0: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20  he first time.  
7c00: 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74  During.** this t
7c10: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  ransformation, t
7c20: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72  he length of str
7c30: 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74  ing P4 is comput
7c40: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a  ed and stored.**
7c50: 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d   as the P1 param
7c60: 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eter..*/.case OP
7c70: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
7c80: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7c90: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
7ca0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7cb0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7cc0: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
7cd0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
7ce0: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
7cf0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
7d00: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
7d10: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7d20: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
7d30: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
7d40: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
7d50: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7d60: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
7d70: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
7d80: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
7d90: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
7da0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
7db0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7dc0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
7dd0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
7de0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
7df0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
7e00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
7e10: 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c  sert( pOut->zMal
7e20: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
7e30: 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65      assert( Vdbe
7e40: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
7e50: 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  ==0 );.    pOut-
7e60: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7e70: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
7e80: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7e90: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
7ea0: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
7eb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
7ec0: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
7ed0: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
7ee0: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
7ef0: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
7f00: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
7f10: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
7f20: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64  Out->n;.  }.#end
7f30: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
7f40: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7f50: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7f60: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
7f70: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
7f80: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7f90: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7fa0: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7fb0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7fc0: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7fd0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7fe0: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
7ff0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
8000: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
8010: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
8020: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
8030: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8040: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
8050: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8060: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
8070: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8080: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
8090: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
80a0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
80b0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
80c0: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
80d0: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
80e0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
80f0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
8100: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
8110: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8120: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
8130: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8140: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
8150: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
8160: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
8170: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
8180: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
8190: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
81a0: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
81b0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
81c0: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
81d0: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
81e0: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
81f0: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
8200: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
8210: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
8220: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
8230: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
8240: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
8250: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
8260: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
8270: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
8280: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
8290: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
82a0: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
82b0: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
82c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
82d0: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
82e0: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
82f0: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
8300: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8310: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
8320: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
8330: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
8340: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
8350: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
8360: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
8370: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8380: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
8390: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
83a0: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
83b0: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
83c0: 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63  Null;.  while( c
83d0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
83e0: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
83f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
8400: 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  );.    VdbeMemRe
8410: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
8420: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8430: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
8440: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
8450: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8460: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
8470: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8480: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
8490: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
84a0: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
84b0: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
84c0: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
84d0: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
84e0: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
84f0: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
8500: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
8510: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
8520: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
8530: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
8540: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
8550: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
8560: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
8570: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
8580: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
8590: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
85a0: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
85b0: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
85c0: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
85d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
85e0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
85f0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8600: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
8610: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p1];.  pOut->f
8620: 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c  lags = (pOut->fl
8630: 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d  ags|MEM_Null)&~M
8640: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
8650: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8660: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
8670: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8680: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65  is: r[P2]=P4 (le
8690: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70  n=P1).**.** P4 p
86a0: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
86b0: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
86c0: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
86d0: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
86e0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
86f0: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8710: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8720: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8730: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
8740: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73  AX_LENGTH );.  s
8750: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8760: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
8770: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
8780: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
8790: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
87a0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
87b0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
87c0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
87d0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
87e0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
87f0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
8800: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
8810: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
8820: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
8830: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
8840: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
8850: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
8860: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
8870: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
8880: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
8890: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
88a0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
88b0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
88c0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
88d0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
88e0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
88f0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65  erelease */.  Me
8900: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
8910: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
8920: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
8930: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8940: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
8950: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
8960: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
8970: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d  || pOp->p4.z==p-
8980: 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31  >azVar[pOp->p1-1
8990: 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  ] );.  pVar = &p
89a0: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
89b0: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
89c0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
89d0: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
89e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
89f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8a00: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8a10: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
8a20: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
8a30: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
8a40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8a50: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
8a60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
8a70: 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d  opsis:  r[P2@P3]
8a80: 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P3].**.** 
8a90: 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75  Move the P3 valu
8aa0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
8ab0: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
8ac0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
8ad0: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
8ae0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
8af0: 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P3-1 are.** lef
8b00: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
8b10: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
8b20: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
8b30: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
8b40: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
8b50: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
8b60: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
8b70: 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65  .** for P3 to be
8b80: 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f   less than 1..*/
8b90: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
8ba0: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
8bb0: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
8bc0: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
8bd0: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
8be0: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
8bf0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8c00: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
8c10: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
8c20: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
8c30: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
8c40: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
8c50: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
8c60: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
8c70: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
8c80: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
8c90: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
8ca0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
8cb0: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
8cc0: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
8cd0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
8ce0: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
8cf0: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
8d00: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
8d10: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
8d20: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
8d30: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8d40: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
8d50: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
8d60: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
8d70: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
8d80: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
8d90: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
8da0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
8db0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62  , pOut);.    Vdb
8dc0: 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74  eMemRelease(pOut
8dd0: 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  );.    zMalloc =
8de0: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
8df0: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2c      memcpy(pOut,
8e00: 20 70 49 6e 31 2c 20 73 69 7a 65 6f 66 28 4d 65   pIn1, sizeof(Me
8e10: 6d 29 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  m));.#ifdef SQLI
8e20: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
8e30: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
8e40: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
8e50: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8e60: 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70  <&aMem[p1+pOp->p
8e70: 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  3] ){.      pOut
8e80: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
8e90: 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p1 - pOp->p2;.  
8ea0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70    }.#endif.    p
8eb0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
8ec0: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
8ed0: 70 49 6e 31 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a  pIn1->xDel = 0;.
8ee0: 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f      pIn1->zMallo
8ef0: 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20  c = zMalloc;.   
8f00: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8f10: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
8f20: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
8f30: 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  t++;.  }while( -
8f40: 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  -n );.  break;.}
8f50: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
8f60: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
8f70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8f80: 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31  @P3+1]=r[P1@P3+1
8f90: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ].**.** Make a c
8fa0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
8fb0: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
8fc0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
8fd0: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
8fe0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8ff0: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
9000: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
9010: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
9020: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
9030: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
9040: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
9050: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
9060: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
9070: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
9080: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
9090: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
90a0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
90b0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
90c0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
90d0: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
90e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
90f0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9100: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9110: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
9120: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64  lize(pOut);.#ifd
9130: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9140: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
9150: 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66  From = 0;.#endif
9160: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9170: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d  ACE(pOp->p2+pOp-
9180: 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20  >p3-n, pOut);.  
9190: 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29    if( (n--)==0 )
91a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74   break;.    pOut
91b0: 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  ++;.    pIn1++;.
91c0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
91d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
91e0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
91f0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9200: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  r[P1].**.** Make
9210: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9220: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
9230: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
9240: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9250: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9260: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
9270: 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74  the value.  If t
9280: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61  he value.** is a
9290: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
92a0: 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69   then the copy i
92b0: 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72  s only a pointer
92c0: 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69   to the.** origi
92d0: 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66  nal and hence if
92e0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68   the original ch
92f0: 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68  anges so will th
9300: 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65  e copy..** Worse
9310: 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  , if the origina
9320: 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64  l is deallocated
9330: 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d  , the copy becom
9340: 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54  es invalid..** T
9350: 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hus the program 
9360: 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74  must guarantee t
9370: 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  hat the original
9380: 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65   will not change
9390: 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c  .** during the l
93a0: 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63  ifetime of the c
93b0: 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70  opy.  Use OP_Cop
93c0: 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70  y to make a comp
93d0: 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f  lete.** copy..*/
93e0: 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20  .case OP_SCopy: 
93f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9400: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
9410: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9420: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9430: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
9440: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
9450: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
9460: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
9470: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
9480: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
9490: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
94a0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
94b0: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
94c0: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
94d0: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
94e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
94f0: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
9500: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9510: 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d   output=r[P1@P2]
9520: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
9530: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
9540: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
9550: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
9560: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
9570: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
9580: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
9590: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
95a0: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
95b0: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
95c0: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
95d0: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
95e0: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
95f0: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
9600: 63 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31  cess to the r(P1
9610: 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61  )..r(P1+P2-1) va
9620: 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72  lues as.** the r
9630: 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61  esult row..*/.ca
9640: 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a  se OP_ResultRow:
9650: 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
9660: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
9670: 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  t( p->nResColumn
9680: 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61  ==pOp->p2 );.  a
9690: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
96a0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
96b0: 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28  p->p1+pOp->p2<=(
96c0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
96d0: 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65  or)+1 );..#ifnde
96e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
96f0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
9700: 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f    /* Run the pro
9710: 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75  gress counter ju
9720: 73 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  st before return
9730: 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ing..  */.  if( 
9740: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
9750: 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d  .   && nVmStep>=
9760: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20  nProgressLimit. 
9770: 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65    && db->xProgre
9780: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
9790: 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  Arg)!=0.  ){.   
97a0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
97b0: 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f  ERRUPT;.    goto
97c0: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
97d0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
97e0: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
97f0: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
9800: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
9810: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
9820: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
9830: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
9840: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
9850: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
9860: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
9870: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
9880: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
9890: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
98a0: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
98b0: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
98c0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
98d0: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
98e0: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
98f0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
9900: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
9910: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
9920: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61  rnal );.    brea
9930: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  k;.  }..  /* If 
9940: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
9950: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
9960: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
9970: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
9980: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
9990: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
99a0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
99b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
99c0: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
99d0: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
99e0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
99f0: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
9a00: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
9a10: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
9a20: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
9a30: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
9a40: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
9a50: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
9a60: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
9a70: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
9a80: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
9a90: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
9aa0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
9ab0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
9ac0: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
9ad0: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
9ae0: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
9af0: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
9b00: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
9b10: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
9b20: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
9b30: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
9b40: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
9b50: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
9b60: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
9b70: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
9b80: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
9b90: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
9ba0: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
9bb0: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
9bc0: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
9bd0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
9be0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
9bf0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
9c00: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
9c10: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
9c20: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
9c30: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
9c40: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
9c50: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
9c60: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
9c70: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
9c80: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
9c90: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
9ca0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
9cb0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
9cc0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
9cd0: 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  SE);.  if( NEVER
9ce0: 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
9cf0: 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
9d00: 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  }..  /* Invalida
9d10: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
9d20: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
9d30: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
9d40: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
9d50: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
9d60: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
9d70: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
9d80: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
9d90: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
9da0: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
9db0: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
9dc0: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
9dd0: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
9de0: 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65  as.  ** a side e
9df0: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
9e00: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
9e10: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
9e20: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
9e30: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
9e40: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9e50: 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d  IsValid(&pMem[i]
9e60: 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  ) );.    Deephem
9e70: 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d  eralize(&pMem[i]
9e80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
9e90: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
9ea0: 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20  MEM_Ephem)==0.  
9eb0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d            || (pM
9ec0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d  em[i].flags & (M
9ed0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
9ee0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )==0 );.    sqli
9ef0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
9f00: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
9f10: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9f20: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
9f30: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
9f40: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
9f50: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
9f60: 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72  mem;..  /* Retur
9f70: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
9f80: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  /.  p->pc = pc +
9f90: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
9fa0: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
9fb0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
9fc0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
9fd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9fe0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
9ff0: 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]+r[P1].**.*
a000: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
a010: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
a020: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
a030: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
a040: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
a050: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
a060: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a070: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
a080: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
a090: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
a0a0: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
a0b0: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
a0c0: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
a0d0: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
a0e0: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
a0f0: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
a100: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
a110: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
a120: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
a130: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a140: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
a150: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
a160: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
a170: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
a180: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
a190: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
a1a0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
a1b0: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
a1c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a1d0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
a1e0: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
a1f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
a200: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
a210: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
a220: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
a230: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
a240: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
a250: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
a260: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
a270: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
a280: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
a290: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
a2a0: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
a2b0: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
a2c0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
a2d0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
a2e0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
a2f0: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
a300: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
a310: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
a320: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
a330: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
a340: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
a350: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
a360: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
a370: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
a380: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
a390: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
a3a0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a3b0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
a3c0: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
a3d0: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
a3e0: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
a3f0: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
a400: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
a410: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
a420: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
a430: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d   pOut->z[nByte]=
a440: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
a450: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
a460: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
a470: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
a480: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
a490: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
a4a0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
a4b0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
a4c0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a4d0: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
a4e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
a4f0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
a500: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
a510: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
a520: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
a530: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
a540: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
a550: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
a560: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
a570: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
a580: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
a590: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
a5a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
a5b0: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
a5c0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
a5d0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  s:  r[P3]=r[P1]*
a5e0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
a5f0: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
a600: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
a610: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
a620: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
a630: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a640: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a650: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a660: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
a670: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a680: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a690: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
a6a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a6b0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a6c0: 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  2]-r[P1].**.** S
a6d0: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
a6e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
a6f0: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
a700: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
a710: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
a720: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a730: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
a740: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
a750: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a760: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a770: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
a780: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a790: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a7a0: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
a7b0: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
a7c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
a7d0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
a7e0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
a7f0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a800: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a810: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
a820: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
a830: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
a840: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
a850: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
a860: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
a870: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
a880: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
a890: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
a8a0: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
a8b0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
a8c0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  s:  r[P3]=r[P2]%
a8d0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
a8e0: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
a8f0: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
a900: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
a910: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
a920: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
a930: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
a940: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
a950: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
a960: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
a970: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
a980: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
a990: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
a9a0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
a9b0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
a9c0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a9e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
a9f0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
aa00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
aa10: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
aa20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
aa30: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
aa40: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
aa50: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
aa60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
aa70: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
aa80: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
aa90: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aab0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
aac0: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
aad0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
aae0: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
aaf0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ab00: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
ab10: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
ab20: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
ab30: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
ab40: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
ab50: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
ab60: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
ab70: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
ab80: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
ab90: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
aba0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
abb0: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
abc0: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
abd0: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
abe0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
abf0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
ac00: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
ac10: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
ac20: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
ac30: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
ac40: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
ac50: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
ac60: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
ac70: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
ac80: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
ac90: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
aca0: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
acb0: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
acc0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
acd0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
ace0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
acf0: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
ad00: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
ad10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ad20: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
ad30: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
ad40: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
ad50: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
ad60: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
ad70: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
ad80: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
ad90: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
ada0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
adb0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
adc0: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
add0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
ade0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
adf0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
ae00: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
ae10: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
ae20: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
ae30: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
ae40: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
ae50: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
ae60: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
ae70: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
ae80: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
ae90: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
aea0: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
aeb0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
aec0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
aed0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
aee0: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
aef0: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
af00: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
af10: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
af20: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
af30: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
af40: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
af50: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
af60: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
af70: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
af80: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
af90: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
afa0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
afb0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
afc0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
afd0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
afe0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
aff0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b000: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b010: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b020: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
b030: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
b040: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b050: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
b060: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
b070: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b080: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
b090: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
b0a0: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
b0b0: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
b0c0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
b0d0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
b0e0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
b0f0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
b100: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b110: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b120: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b130: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
b140: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b150: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
b160: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
b170: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
b180: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
b190: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
b1a0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
b1b0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
b1c0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
b1d0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
b1e0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
b1f0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
b200: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
b210: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
b220: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
b230: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
b240: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
b250: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
b260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
b270: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
b280: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
b290: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
b2a0: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
b2b0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
b2c0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b2d0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b2e0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b2f0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
b300: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
b310: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
b320: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b330: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
b340: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
b350: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
b360: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
b370: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b380: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
b390: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
b3a0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
b3b0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
b3c0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b3d0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
b3e0: 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72  .    pOut->r = r
b3f0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
b400: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b410: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
b420: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
b430: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
b440: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
b450: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
b460: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
b470: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
b480: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
b490: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
b4a0: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
b4b0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b4c0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
b4d0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
b4e0: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
b4f0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
b500: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
b510: 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68  eq struct. If th
b520: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
b530: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
b540: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
b550: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
b560: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
b570: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
b580: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
b590: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
b5a0: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
b5b0: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
b5c0: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
b5d0: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
b5e0: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
b5f0: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
b600: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
b610: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
b620: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
b630: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
b640: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
b650: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
b660: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
b670: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
b680: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
b690: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
b6a0: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
b6b0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
b6c0: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
b6d0: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
b6e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
b6f0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
b700: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
b710: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
b720: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
b730: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
b740: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
b750: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20  le.** publicly, 
b760: 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e  only to user fun
b770: 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69  ctions defined i
b780: 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73  n func.c..*/.cas
b790: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
b7a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
b7b0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
b7c0: 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Q );.  if( pOp->
b7d0: 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
b7e0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
b7f0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
b800: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
b810: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b820: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
b830: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
b840: 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28  sis: r[P3]=func(
b850: 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
b860: 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75  Invoke a user fu
b870: 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20  nction (P4 is a 
b880: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e  pointer to a Fun
b890: 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20  ction structure 
b8a0: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
b8b0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
b8c0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
b8d0: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
b8e0: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
b8f0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
b900: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
b910: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
b920: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b930: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
b940: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
b950: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
b960: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
b970: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
b980: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
b990: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
b9a0: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
b9b0: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
b9c0: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
b9d0: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
b9e0: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
b9f0: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
ba00: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
ba10: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
ba20: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
ba30: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
ba40: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
ba50: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
ba60: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
ba70: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
ba80: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
ba90: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
baa0: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
bab0: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
bac0: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
bad0: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
bae0: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
baf0: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
bb00: 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67   AggStep and Agg
bb10: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
bb20: 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69  _Function: {.  i
bb30: 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  nt i;.  Mem *pAr
bb40: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  g;.  sqlite3_con
bb50: 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
bb60: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
bb70: 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e  l;.  int n;..  n
bb80: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70   = pOp->p5;.  ap
bb90: 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
bba0: 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
bbb0: 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73  || n==0 );.  ass
bbc0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
bbd0: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
bbe0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
bbf0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
bc00: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
bc10: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
bc20: 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65  , pOut);..  asse
bc30: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
bc40: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
bc50: 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
bc60: 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
bc70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
bc80: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
bc90: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
bca0: 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65  );.  pArg = &aMe
bcb0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
bcc0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
bcd0: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73   pArg++){.    as
bce0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
bcf0: 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70  (pArg) );.    ap
bd00: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
bd10: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
bd20: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47  e(pArg);.    REG
bd30: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
bd40: 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20  >p2+i, pArg);.  
bd50: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
bd60: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
bd70: 43 44 45 46 20 29 3b 0a 20 20 63 74 78 2e 70 46  CDEF );.  ctx.pF
bd80: 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
bd90: 75 6e 63 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d  unc;.  ctx.iOp =
bda0: 20 70 63 3b 0a 20 20 63 74 78 2e 70 56 64 62 65   pc;.  ctx.pVdbe
bdb0: 20 3d 20 70 3b 0a 0a 20 20 2f 2a 20 54 68 65 20   = p;..  /* The 
bdc0: 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
bdd0: 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
bde0: 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
bdf0: 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70   Move.  ** the p
be00: 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20  ointer to ctx.s 
be10: 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
be20: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e  ser-function can
be30: 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c   use.  ** the al
be40: 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
be50: 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
be60: 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e  f allocating a n
be70: 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 6d  ew one..  */.  m
be80: 65 6d 63 70 79 28 26 63 74 78 2e 73 2c 20 70 4f  emcpy(&ctx.s, pO
be90: 75 74 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29  ut, sizeof(Mem))
bea0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
beb0: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f  = MEM_Null;.  pO
bec0: 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  ut->xDel = 0;.  
bed0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
bee0: 30 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  0;.  MemSetTypeF
bef0: 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f  lag(&ctx.s, MEM_
bf00: 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 66 45  Null);..  ctx.fE
bf10: 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
bf20: 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
bf30: 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49  funcFlags & SQLI
bf40: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
bf50: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
bf60: 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  pOp>aOp );.    a
bf70: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
bf80: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
bf90: 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
bfa0: 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
bfb0: 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
bfc0: 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
bfd0: 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
bfe0: 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52  .  }.  db->lastR
bff0: 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
c000: 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d  ;.  (*ctx.pFunc-
c010: 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c  >xFunc)(&ctx, n,
c020: 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
c030: 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
c040: 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  /.  lastRowid = 
c050: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a  db->lastRowid;..
c060: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
c070: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a  Failed ){.    /*
c080: 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d   Even though a m
c090: 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c  alloc() has fail
c0a0: 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ed, the implemen
c0b0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  tation of the.  
c0c0: 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69    ** user functi
c0d0: 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c  on may have call
c0e0: 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65  ed an sqlite3_re
c0f0: 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74  sult_XXX() funct
c100: 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65  ion.    ** to re
c110: 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68  turn a value. Th
c120: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
c130: 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65   releases any re
c140: 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61  sources.    ** a
c150: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 73  ssociated with s
c160: 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20  uch a value..   
c170: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
c180: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
c190: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
c1a0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f  no_mem;.  }..  /
c1b0: 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f  * If the functio
c1c0: 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72  n returned an er
c1d0: 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78  ror, throw an ex
c1e0: 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28  ception */.  if(
c1f0: 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78   ctx.fErrorOrAux
c200: 20 29 7b 0a 20 20 20 20 69 66 28 20 63 74 78 2e   ){.    if( ctx.
c210: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20  isError ){.     
c220: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
c230: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
c240: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
c250: 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
c260: 2e 73 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  .s));.      rc =
c270: 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
c280: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
c290: 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61  dbeDeleteAuxData
c2a0: 28 70 2c 20 70 63 2c 20 70 4f 70 2d 3e 70 31 29  (p, pc, pOp->p1)
c2b0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
c2c0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
c2d0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
c2e0: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
c2f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
c300: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78  ngeEncoding(&ctx
c310: 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
c320: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 66   assert( pOut->f
c330: 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
c340: 3b 0a 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2c  ;.  memcpy(pOut,
c350: 20 26 63 74 78 2e 73 2c 20 73 69 7a 65 6f 66 28   &ctx.s, sizeof(
c360: 4d 65 6d 29 29 3b 0a 20 20 69 66 28 20 73 71 6c  Mem));.  if( sql
c370: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
c380: 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67  g(pOut) ){.    g
c390: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
c3a0: 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68 65  ..#if 0.  /* The
c3b0: 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75 6e   app-defined fun
c3c0: 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73  ction has done s
c3d0: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61 73  omething that as
c3e0: 20 63 61 75 73 65 64 20 74 68 69 73 0a 20 20 2a   caused this.  *
c3f0: 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65  * statement to e
c400: 78 70 69 72 65 2e 20 20 28 50 65 72 68 61 70 73  xpire.  (Perhaps
c410: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61   the function ca
c420: 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78 65  lled sqlite3_exe
c430: 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61 20  c().  ** with a 
c440: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
c450: 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20  tement.).  */.  
c460: 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
c470: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
c480: 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45  RT;.#endif..  RE
c490: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
c4a0: 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
c4b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
c4c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
c4d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c4e0: 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33   BitAnd P1 P2 P3
c4f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c500: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72  :  r[P3]=r[P1]&r
c510: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
c520: 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44  the bit-wise AND
c530: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
c540: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c550: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
c560: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c570: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c580: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c590: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c5a0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c5b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72  /* Opcode: BitOr
c5c0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c5d0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c5e0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
c5f0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c600: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
c610: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c620: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
c630: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
c640: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c650: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c660: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c670: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c680: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c690: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
c6a0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c6b0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
c6c0: 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]<<r[P1].**.**
c6d0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
c6e0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
c6f0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
c700: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
c710: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
c720: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
c730: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
c740: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
c750: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c760: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
c770: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
c780: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
c790: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
c7a0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
c7b0: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
c7c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c7d0: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
c7e0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
c7f0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
c800: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
c810: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
c820: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
c830: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
c840: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
c850: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
c860: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
c870: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c880: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c890: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c8a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c8b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
c8c0: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
c8d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c8e0: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
c8f0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
c900: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
c910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c920: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
c930: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c940: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
c950: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
c960: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c970: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
c980: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
c990: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
c9a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c9b0: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
c9c0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c9d0: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
c9e0: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
c9f0: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
ca00: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ca10: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
ca20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
ca30: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
ca40: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
ca50: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
ca60: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
ca70: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
ca80: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
ca90: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
caa0: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
cab0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
cac0: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
cad0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
cae0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
caf0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
cb00: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
cb10: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
cb20: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
cb30: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
cb40: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
cb50: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
cb60: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
cb70: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
cb80: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
cb90: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
cba0: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
cbb0: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
cbc0: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
cbd0: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
cbe0: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
cbf0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
cc00: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
cc10: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
cc20: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
cc30: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
cc40: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
cc50: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
cc60: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
cc70: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
cc80: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
cc90: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
cca0: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
ccb0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
ccc0: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
ccd0: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
cce0: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
ccf0: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
cd00: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
cd10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
cd20: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
cd30: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
cd40: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
cd50: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
cd60: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
cd70: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
cd80: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
cd90: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
cda0: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
cdb0: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
cdc0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
cdd0: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
cde0: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
cdf0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
ce00: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ce10: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ce20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ce30: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
ce40: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
ce50: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d  ynopsis:  r[P1]=
ce60: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
ce70: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
ce80: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
ce90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
cea0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
ceb0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
cec0: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
ced0: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
cee0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
cef0: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
cf00: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
cf10: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
cf20: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
cf30: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
cf40: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
cf50: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
cf60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
cf70: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
cf80: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
cf90: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
cfa0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
cfb0: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
cfc0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
cfd0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
cfe0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
cff0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
d000: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
d010: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
d020: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
d030: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
d040: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
d050: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
d060: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
d070: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
d080: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
d090: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
d0a0: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
d0b0: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
d0c0: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
d0d0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
d0e0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d0f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d100: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d110: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
d120: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
d130: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
d140: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
d150: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d160: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
d170: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
d180: 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  _Int)==0, 2);.  
d190: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d1a0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
d1b0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
d1c0: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
d1d0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
d1e0: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
d1f0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
d200: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
d210: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d220: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
d230: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
d240: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
d250: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
d260: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
d270: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d280: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d290: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d2a0: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
d2b0: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
d2c0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
d2d0: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
d2e0: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
d2f0: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
d300: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
d310: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
d320: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
d330: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
d340: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
d350: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
d360: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
d370: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
d380: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
d390: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
d3a0: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
d3b0: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
d3c0: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
d3d0: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
d3e0: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
d3f0: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
d400: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d430: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d440: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
d450: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
d460: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d470: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
d480: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d490: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
d4a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
d4b0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
d4c0: 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a  oText P1 * * * *
d4d0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
d4e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d4f0: 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74  er P1 to be text
d500: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
d510: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
d520: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
d530: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
d540: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
d550: 73 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62  sprintf().  Blob
d560: 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68   values are unch
d570: 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65  anged and.** are
d580: 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70   afterwards simp
d590: 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  ly interpreted a
d5a0: 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20  s text..**.** A 
d5b0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
d5c0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
d5d0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
d5e0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
d5f0: 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20  case OP_ToText: 
d600: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d610: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d620: 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f  _TO_TEXT, in1 */
d630: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d640: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d650: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d660: 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn1);.  if( pIn
d670: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
d680: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61  ull ) break;.  a
d690: 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d  ssert( MEM_Str==
d6a0: 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b  (MEM_Blob>>3) );
d6b0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  .  pIn1->flags |
d6c0: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  = (pIn1->flags&M
d6d0: 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61  EM_Blob)>>3;.  a
d6e0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d6f0: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
d700: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
d710: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
d720: 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74  (pIn1);.  assert
d730: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d740: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
d750: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
d760: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
d770: 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65  ~(MEM_Int|MEM_Re
d780: 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  al|MEM_Blob|MEM_
d790: 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f  Zero);.  UPDATE_
d7a0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
d7b0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
d7c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f  /* Opcode: ToBlo
d7d0: 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  b P1 * * * *.**.
d7e0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d7f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d800: 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a  1 to be a BLOB..
d810: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
d820: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
d830: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
d840: 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72  ng first..** Str
d850: 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20  ings are simply 
d860: 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  reinterpreted as
d870: 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63   blobs with no c
d880: 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20  hange.** to the 
d890: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e  underlying data.
d8a0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
d8b0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
d8c0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
d8d0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
d8e0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
d8f0: 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  _ToBlob: {      
d900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d910: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f  ame as TK_TO_BLO
d920: 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  B, in1 */.  pIn1
d930: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d940: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
d950: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
d960: 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28  ) break;.  if( (
d970: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d980: 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
d990: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
d9a0: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
d9b0: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
d9c0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
d9d0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d9e0: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
d9f0: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d  cFailed );.    M
da00: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
da10: 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  n1, MEM_Blob);. 
da20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
da30: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
da40: 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42  _TypeMask&~MEM_B
da50: 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  lob);.  }.  UPDA
da60: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
da70: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
da80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
da90: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
daa0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
dab0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
dac0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
dad0: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
dae0: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
daf0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
db00: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
db10: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
db20: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
db30: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
db40: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
db50: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
db60: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
db70: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
db80: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
db90: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
dba0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
dbb0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
dbc0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
dbd0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
dbe0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
dbf0: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc10: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
dc20: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
dc30: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
dc40: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74  Op->p1];.  sqlit
dc50: 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66  e3VdbeMemNumerif
dc60: 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  y(pIn1);.  break
dc70: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
dc80: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
dc90: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
dca0: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
dcb0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
dcc0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
dcd0: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
dce0: 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65  eger.  If.** The
dcf0: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
dd00: 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65  tly a real numbe
dd10: 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63  r, drop its frac
dd20: 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20  tional part..** 
dd30: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
dd40: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
dd50: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
dd60: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
dd70: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
dd80: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
dd90: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
dda0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
ddb0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
ddc0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
ddd0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
dde0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
ddf0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
de00: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
de10: 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  oInt: {         
de20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
de30: 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69   as TK_TO_INT, i
de40: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
de50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
de60: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
de70: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
de80: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
de90: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
dea0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
deb0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66  eak;.}..#if !def
dec0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
ded0: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
dee0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
def0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f  LOATING_POINT)./
df00: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c  * Opcode: ToReal
df10: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
df20: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
df30: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
df40: 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e   to be a floatin
df50: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
df60: 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20  ** If The value 
df70: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20  is currently an 
df80: 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74  integer, convert
df90: 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76   it..** If the v
dfa0: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
dfb0: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
dfc0: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e  vert it to an in
dfd0: 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a  teger using the.
dfe0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
dff0: 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72   atoi() and stor
e000: 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68  e 0.0 if no such
e010: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
e020: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
e030: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
e040: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
e050: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
e060: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
e070: 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a  .case OP_ToReal:
e080: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e090: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e0a0: 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a  K_TO_REAL, in1 *
e0b0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
e0c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
e0d0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e0e0: 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28 70   pIn1);.  if( (p
e0f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e100: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
e110: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
e120: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
e130: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
e140: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
e150: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e160: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
e170: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e180: 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a  NG_POINT) */../*
e190: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
e1a0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e1b0: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e1c0: 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  <r[P3] goto P2.*
e1d0: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
e1e0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
e1f0: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
e200: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
e210: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
e220: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
e230: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
e240: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e250: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
e260: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
e270: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
e280: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
e290: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
e2a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
e2b0: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
e2c0: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
e2d0: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
e2e0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e2f0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
e300: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
e310: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
e320: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
e330: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
e340: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
e350: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
e360: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
e370: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
e380: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
e390: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
e3a0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
e3b0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
e3c0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
e3d0: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
e3e0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
e3f0: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
e400: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
e410: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
e420: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
e430: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
e440: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
e450: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
e460: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
e470: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
e480: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
e490: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
e4a0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
e4b0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e4c0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
e4d0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
e4e0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
e4f0: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
e500: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
e510: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
e520: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
e530: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
e540: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
e550: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
e560: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
e570: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
e580: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
e590: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
e5a0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
e5b0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
e5c0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
e5d0: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
e5e0: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
e5f0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
e600: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
e610: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
e620: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
e630: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
e640: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
e650: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
e660: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
e670: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
e680: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
e690: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
e6a0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
e6b0: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
e6c0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
e6d0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
e6e0: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
e6f0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
e700: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
e710: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
e720: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
e730: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
e740: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
e750: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
e760: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
e770: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
e780: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
e790: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
e7a0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
e7b0: 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69  ITE_NULLEQ bit i
e7c0: 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65  s set in P5, the
e7d0: 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  n NULL values ar
e7e0: 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20  e considered.** 
e7f0: 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f  equal to one ano
e800: 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74  ther, provided t
e810: 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20  hat they do not 
e820: 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43  have their MEM_C
e830: 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65  leared.** bit se
e840: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
e850: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
e860: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e870: 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20  if r[P1]!=r[P3] 
e880: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e890: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e8a0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e8b0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e8c0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e8d0: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e8e0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e8f0: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
e900: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
e910: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Lt opcode for.*
e920: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
e930: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
e940: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e950: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
e960: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e970: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e980: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e990: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e9a0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e9b0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e9c0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e9d0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e9e0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e9f0: 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65  false.  If eithe
ea00: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
ea10: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
ea20: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66  t is true..** If
ea30: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
ea40: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
ea50: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
ea60: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
ea70: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
ea80: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
ea90: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
eaa0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
eab0: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
eac0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
ead0: 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67  f r[P1]==r[P3] g
eae0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
eaf0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
eb00: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
eb10: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
eb20: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
eb30: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
eb40: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
eb50: 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61   and P3 are equa
eb60: 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74  l..** See the Lt
eb70: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
eb80: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
eb90: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  on..**.** If SQL
eba0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
ebb0: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
ebc0: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
ebd0: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
ebe0: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
ebf0: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
ec00: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
ec10: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
ec20: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
ec30: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
ec40: 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20  arison is true. 
ec50: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
ec60: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
ec70: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
ec80: 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  lse..** If neith
ec90: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
eca0: 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  LL the result is
ecb0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
ecc0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
ecd0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
ece0: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
ecf0: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
ed00: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
ed10: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
ed20: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
ed30: 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]<=r[P3] goto P2
ed40: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ed50: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ed60: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ed70: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
ed80: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ed90: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
eda0: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
edb0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
edc0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
edd0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
ede0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
edf0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
ee00: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
ee10: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
ee20: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
ee30: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
ee40: 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]>r[P3] goto
ee50: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
ee60: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
ee70: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
ee80: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
ee90: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eea0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
eeb0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
eec0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
eed0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
eee0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
eef0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ef00: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ef10: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
ef20: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
ef30: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
ef40: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
ef50: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
ef60: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
ef70: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
ef80: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
ef90: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
efa0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
efb0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
efc0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
efd0: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
efe0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
eff0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
f000: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
f010: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
f020: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f030: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f050: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
f060: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f070: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
f080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f090: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
f0a0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f0b0: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
f0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f0d0: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
f0e0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f0f0: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
f100: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f110: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
f120: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f130: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
f140: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f150: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
f160: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f170: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
f180: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f190: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
f1a0: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
f1b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
f1c0: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
f1d0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
f1e0: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
f1f0: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
f200: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
f210: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
f220: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
f230: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
f240: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
f250: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
f260: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
f270: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
f280: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
f290: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
f2a0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
f2b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f2c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
f2d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
f2e0: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
f2f0: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
f300: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
f310: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20  ;.  if( (flags1 
f320: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75  | flags3)&MEM_Nu
f330: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
f340: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
f350: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
f360: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f370: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
f380: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
f390: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
f3a0: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
f3b0: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
f3c0: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
f3d0: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
f3e0: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
f3f0: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
f400: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f410: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
f420: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
f430: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
f440: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
f450: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
f460: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
f470: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
f480: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
f490: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61  lags1 & MEM_Clea
f4a0: 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  red)==0 );.     
f4b0: 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
f4c0: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
f4d0: 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20  FNULL)==0 );.   
f4e0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d     if( (flags1&M
f4f0: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
f500: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
f510: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f520: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f530: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f540: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f550: 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 0;  /* Resul
f560: 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ts are equal */.
f570: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
f580: 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f       res = 1;  /
f590: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f  * Results are no
f5a0: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
f5b0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
f5c0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
f5d0: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
f5e0: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
f5f0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
f600: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
f610: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
f620: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
f630: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
f640: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
f650: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
f660: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
f670: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
f680: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
f690: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
f6a0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f6b0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
f6c0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f6d0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f6e0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
f6f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f700: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
f710: 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
f720: 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
f730: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
f740: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
f750: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
f760: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
f770: 70 32 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a  p2-1;.        }.
f780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
f790: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
f7a0: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
f7b0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f7c0: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
f7d0: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
f7e0: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
f7f0: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
f800: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
f810: 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
f820: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
f830: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
f840: 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c  ing);.      appl
f850: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
f860: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
f870: 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64  ng);.      if( d
f880: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
f890: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
f8a0: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
f8b0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
f8c0: 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
f8d0: 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
f8e0: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
f8f0: 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e  pIn1);.    Expan
f900: 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
f910: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
f920: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
f930: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
f940: 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63  ll);.  }.  switc
f950: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
f960: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
f970: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d  :    res = res==
f980: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
f990: 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20    case OP_Ne:   
f9a0: 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20   res = res!=0;  
f9b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f9c0: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
f9d0: 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62   = res<0;      b
f9e0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f9f0: 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Le:    res = r
fa00: 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
fa10: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
fa20: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30  :    res = res>0
fa30: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
fa40: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
fa50: 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20   res = res>=0;  
fa60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
fa70: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
fa80: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
fa90: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
faa0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
fab0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
fac0: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d  (p, pOut);.    M
fad0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
fae0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
faf0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
fb00: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
fb10: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
fb20: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
fb30: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
fb40: 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d  en(res!=0, (pOp-
fb50: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
fb60: 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69  LEQ)?2:3);.    i
fb70: 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
fb80: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
fb90: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20 55      }.  }.  /* U
fba0: 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
fbb0: 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
fbc0: 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
fbd0: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
fbe0: 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  */.  pIn1->flags
fbf0: 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26   = (pIn1->flags&
fc00: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
fc10: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70   (flags1&MEM_Typ
fc20: 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e  eMask);.  pIn3->
fc30: 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66  flags = (pIn3->f
fc40: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
fc50: 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45  sk) | (flags3&ME
fc60: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62  M_TypeMask);.  b
fc70: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fc80: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
fc90: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
fca0: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
fcb0: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
fcc0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
fcd0: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
fce0: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
fcf0: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
fd00: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
fd10: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
fd20: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
fd30: 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
fd40: 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
fd50: 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
fd60: 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
fd70: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
fd80: 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
fd90: 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
fda0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
fdb0: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
fdc0: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
fdd0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
fde0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
fdf0: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
fe00: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
fe10: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
fe20: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
fe30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
fe40: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
fe50: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
fe60: 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c  psis: r[P1@P3] <
fe70: 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  -> r[P2@P3].**.*
fe80: 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65  * Compare two ve
fe90: 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65  ctors of registe
fea0: 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72  rs in reg(P1)..r
feb0: 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c  eg(P1+P3-1) (cal
fec0: 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72  l this.** vector
fed0: 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67   "A") and in reg
fee0: 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d  (P2)..reg(P2+P3-
fef0: 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20  1) ("B").  Save 
ff00: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
ff10: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
ff20: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e  for use by the n
ff30: 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74  ext OP_Jump inst
ff40: 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ruct..**.** If P
ff50: 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
ff60: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
ff70: 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72  , then the order
ff80: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
ff90: 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20  s.** determined 
ffa0: 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
ffb0: 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  nt OP_Permutatio
ffc0: 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20  n operator.  If 
ffd0: 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45  the.** OPFLAG_PE
ffe0: 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65  RMUTE bit is cle
fff0: 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65  ar, then registe
10000 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  r are compared i
10010 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20  n sequential.** 
10020 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  order..**.** P4 
10030 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
10040 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
10050 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
10060 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
10070 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
10080 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
10090 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
100a0 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
100b0 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
100c0 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
100d0 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
100e0 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
100f0 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
10100 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
10110 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
10120 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
10130 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
10140 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
10150 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
10160 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
10170 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
10180 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
10190 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
101a0 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
101b0 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
101c0 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
101d0 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
101e0 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
101f0 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
10200 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
10210 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
10220 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
10230 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
10240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
10250 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
10260 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
10270 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
10280 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29   OPFLAG_PERMUTE)
10290 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d  ==0 ) aPermute =
102a0 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   0;.  n = pOp->p
102b0 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
102c0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
102d0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
102e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
102f0 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
10300 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
10310 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
10320 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
10330 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
10340 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
10350 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
10360 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
10370 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
10380 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
10390 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
103a0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
103b0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
103c0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
103d0 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
103e0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
103f0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
10400 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
10410 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
10420 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
10430 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
10440 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
10450 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
10460 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
10470 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
10480 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
10490 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
104a0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
104b0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
104c0 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
104d0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
104e0 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
104f0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
10500 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
10510 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
10520 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
10530 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
10540 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
10550 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
10560 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
10570 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
10580 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  nfo->nField );. 
10590 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49     pColl = pKeyI
105a0 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20  nfo->aColl[i];. 
105b0 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e     bRev = pKeyIn
105c0 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69  fo->aSortOrder[i
105d0 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20  ];.    iCompare 
105e0 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
105f0 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  are(&aMem[p1+idx
10600 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  ], &aMem[p2+idx]
10610 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66  , pColl);.    if
10620 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20  ( iCompare ){.  
10630 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69      if( bRev ) i
10640 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70  Compare = -iComp
10650 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  are;.      break
10660 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50  ;.    }.  }.  aP
10670 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72  ermute = 0;.  br
10680 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10690 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33  e: Jump P1 P2 P3
106a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
106b0 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69  to the instructi
106c0 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31  on at address P1
106d0 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65  , P2, or P3 depe
106e0 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
106f0 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  .** in the most 
10700 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72  recent OP_Compar
10710 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  e instruction th
10720 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20  e P1 vector was 
10730 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75  less than.** equ
10740 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65  al to, or greate
10750 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65  r than the P2 ve
10760 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65  ctor, respective
10770 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  ly..*/.case OP_J
10780 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ump: {          
10790 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
107a0 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29  if( iCompare<0 )
107b0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
107c0 70 31 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p1 - 1;  VdbeBra
107d0 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 0a 20  nchTaken(0,3);. 
107e0 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
107f0 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  are==0 ){.    pc
10800 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20   = pOp->p2 - 1; 
10810 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10820 28 31 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  (1,3);.  }else{.
10830 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33      pc = pOp->p3
10840 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
10850 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 7d  hTaken(2,3);.  }
10860 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10870 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
10880 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
10890 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
108a0 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] && r[P2]).**.
108b0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
108c0 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
108d0 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
108e0 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
108f0 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
10900 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
10910 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
10920 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
10930 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
10940 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
10950 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
10960 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
10970 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
10980 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
10990 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
109a0 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
109b0 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
109c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
109d0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
109e0 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] || r[P2]).**.
109f0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
10a00 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
10a10 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
10a20 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
10a30 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
10a40 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
10a50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
10a60 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
10a70 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
10a80 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
10a90 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
10aa0 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
10ab0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
10ac0 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
10ad0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
10ae0 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
10af0 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
10b00 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
10b10 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
10b20 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
10b30 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
10b40 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10b50 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
10b60 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
10b70 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
10b80 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
10b90 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
10ba0 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
10bb0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
10bc0 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
10bd0 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
10be0 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
10bf0 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
10c00 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
10c10 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10c20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
10c30 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10c40 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
10c50 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
10c60 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10c70 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
10c80 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
10c90 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
10ca0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
10cb0 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
10cc0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
10cd0 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
10ce0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
10cf0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
10d00 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
10d10 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
10d20 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
10d30 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
10d40 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
10d50 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
10d60 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
10d70 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
10d80 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
10d90 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
10da0 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
10db0 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
10dc0 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
10dd0 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
10de0 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
10df0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
10e00 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
10e10 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
10e20 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10e30 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
10e40 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
10e50 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
10e60 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10e70 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
10e80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10e90 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
10ea0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
10eb0 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
10ec0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
10ed0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
10ee0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
10ef0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
10f00 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
10f10 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
10f20 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
10f30 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
10f40 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10f50 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
10f60 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
10f70 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
10f80 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
10f90 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
10fa0 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
10fb0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
10fc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10fd0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
10fe0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10ff0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
11000 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
11010 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
11020 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
11030 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
11040 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
11050 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
11060 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11070 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11080 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
11090 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
110a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
110b0 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
110c0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
110d0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
110e0 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
110f0 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
11100 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
11110 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
11120 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
11130 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
11140 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
11150 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
11160 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11170 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
11180 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11190 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
111a0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
111b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
111c0 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
111d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
111e0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
111f0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11200 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
11210 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
11220 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
11230 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
11240 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
11250 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
11260 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
11270 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
11280 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
11290 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f  **.** Check if O
112a0 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69  P_Once flag P1 i
112b0 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75  s set. If so, ju
112c0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
112d0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
112e0 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67  .** set the flag
112f0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
11300 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
11310 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  struction.  In o
11320 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 74  ther words,.** t
11330 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
11340 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20  s all following 
11350 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75  opcodes up throu
11360 67 68 20 50 32 20 28 62 75 74 20 6e 6f 74 20 69  gh P2 (but not i
11370 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 50 32 29 20  ncluding.** P2) 
11380 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65  to run just once
11390 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70   and to be skipp
113a0 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
113b0 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74   times through t
113c0 68 65 20 6c 6f 6f 70 2e 0a 2a 2f 0a 63 61 73 65  he loop..*/.case
113d0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
113e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
113f0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
11400 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
11410 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  g );.  VdbeBranc
11420 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46  hTaken(p->aOnceF
11430 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c  lag[pOp->p1]!=0,
11440 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f   2);.  if( p->aO
11450 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11460 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11470 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  ->p2-1;.  }else{
11480 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  .    p->aOnceFla
11490 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a  g[pOp->p1] = 1;.
114a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
114b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
114c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
114d0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
114e0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
114f0 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
11500 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
11510 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
11520 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
11530 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
11540 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
11550 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
11560 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
11570 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  mp if P3 is non-
11580 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
11590 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
115a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
115b0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
115c0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
115d0 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
115e0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
115f0 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
11600 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
11610 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
11620 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
11630 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
11640 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
11650 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65  jump if P3 is ze
11660 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
11670 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
11680 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
11690 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
116a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
116b0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
116c0 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
116d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
116e0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
116f0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11700 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
11710 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
11720 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
11730 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
11740 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
11750 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
11760 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
11770 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
11780 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
11790 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
117a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
117b0 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
117c0 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
117d0 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b  hTaken(c!=0, 2);
117e0 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
117f0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
11800 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11810 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
11820 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
11830 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
11840 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
11850 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
11860 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
11870 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11880 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
11890 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
118a0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
118b0 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
118c0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
118d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
118e0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
118f0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
11900 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11910 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
11920 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11930 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
11940 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
11950 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11960 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
11970 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
11980 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11990 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67  if r[P1]!=NULL g
119a0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
119b0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
119c0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
119d0 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P1 is not NULL.
119e0 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f    .*/.case OP_No
119f0 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  tNull: {        
11a00 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11a10 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  K_NOTNULL, jump,
11a20 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
11a30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
11a40 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11a50 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
11a60 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c   & MEM_Null)==0,
11a70 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
11a80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11a90 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)==0 ){.    pc
11aa0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
11ab0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11ac0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
11ad0 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
11ae0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
11af0 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
11b00 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
11b10 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
11b20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
11b30 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
11b40 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
11b50 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
11b60 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
11b70 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
11b80 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
11b90 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
11ba0 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
11bb0 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
11bc0 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
11bd0 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
11be0 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
11bf0 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
11c00 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
11c10 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
11c20 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
11c30 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
11c40 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
11c50 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
11c60 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
11c70 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
11c80 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
11c90 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
11ca0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
11cb0 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
11cc0 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
11cd0 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
11ce0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
11cf0 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
11d00 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
11d10 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
11d20 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
11d30 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
11d40 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
11d50 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
11d60 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
11d70 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
11d80 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
11d90 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
11da0 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
11db0 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
11dc0 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
11dd0 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
11de0 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
11df0 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
11e00 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
11e10 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
11e20 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  et..**.** If the
11e30 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
11e40 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
11e50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20  EOFARG bits are 
11e60 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a  set on P5 when.*
11e70 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
11e80 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e  guaranteed to on
11e90 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ly be used as th
11ea0 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20  e argument of a 
11eb0 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74  length().** or t
11ec0 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
11ed0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
11ee0 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20   The loading of 
11ef0 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20  large blobs can 
11f00 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f  be.** skipped fo
11f10 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61  r length() and a
11f20 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69  ll content loadi
11f30 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65  ng can be skippe
11f40 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a  d for typeof()..
11f50 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
11f60 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f  n: {.  i64 paylo
11f70 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
11f80 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11f90 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11fa0 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
11fb0 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
11fc0 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
11fd0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
11fe0 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
11ff0 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
12000 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
12010 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20     /* The BTree 
12020 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20  cursor */.  u32 
12030 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f  *aType;        /
12040 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73  * aType[i] holds
12050 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
12060 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f  e of the i-th co
12070 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61  lumn */.  u32 *a
12080 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
12090 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
120a0 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
120b0 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
120c0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
120d0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
120e0 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
120f0 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
12100 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
12110 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
12120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
12130 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
12140 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
12150 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
12160 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
12170 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
12180 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
12190 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
121a0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
121b0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
121c0 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
121d0 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
121e0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
121f0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
12200 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
12210 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
12220 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
12230 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
12240 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
12250 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
12260 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
12270 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
12280 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
12290 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
122a0 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65  a */.  u32 szFie
122b0 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ld;       /* Num
122c0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
122d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
122e0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20   field */.  u32 
122f0 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
12300 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
12310 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
12320 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20  ata */.  u32 t; 
12330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
12340 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20   type code from 
12350 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
12360 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67  r */.  Mem *pReg
12370 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65  ;         /* Pse
12380 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72  udoTable input r
12390 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32  egister */..  p2
123a0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
123b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
123c0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
123d0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
123e0 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
123f0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
12400 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
12410 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73  (p, pDest);.  as
12420 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
12430 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
12440 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
12450 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
12460 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
12470 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
12480 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29   p2<pC->nField )
12490 3b 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e  ;.  aType = pC->
124a0 61 54 79 70 65 3b 0a 20 20 61 4f 66 66 73 65 74  aType;.  aOffset
124b0 20 3d 20 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e   = aType + pC->n
124c0 46 69 65 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53  Field;.#ifndef S
124d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
124e0 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
124f0 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
12500 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f  r==0 ); /* OP_Co
12510 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65  lumn never calle
12520 64 20 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62  d on virtual tab
12530 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70  le */.#endif.  p
12540 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
12550 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
12560 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73  rsr!=0 || pC->ps
12570 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29  eudoTableReg>0 )
12580 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20  ; /* pCrsr NULL 
12590 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
125a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  */.  assert( pCr
125b0 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  sr!=0 || pC->nul
125c0 6c 52 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20  lRow );         
125d0 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   /* pC->nullRow 
125e0 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
125f0 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  */..  /* If the 
12600 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20  cursor cache is 
12610 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20  stale, bring it 
12620 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20  up-to-date */.  
12630 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
12640 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
12650 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
12660 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
12670 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e  rror;.  if( pC->
12680 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
12690 63 61 63 68 65 43 74 72 20 7c 7c 20 28 70 4f 70  cacheCtr || (pOp
126a0 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41  ->p5&OPFLAG_CLEA
126b0 52 43 41 43 48 45 29 21 3d 30 20 29 7b 0a 20 20  RCACHE)!=0 ){.  
126c0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
126d0 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  w ){.      if( p
126e0 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Crsr==0 ){.     
126f0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
12700 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20  seudoTableReg>0 
12710 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
12720 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75  = &aMem[pC->pseu
12730 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20  doTableReg];.   
12740 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65       assert( pRe
12750 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
12760 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  lob );.        a
12770 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
12780 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20  d(pReg) );.     
12790 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
127a0 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d  ze = pC->szRow =
127b0 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e   avail = pReg->n
127c0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
127d0 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
127e0 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
127f0 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
12800 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
12810 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  M_Null);.       
12820 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12830 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
12840 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
12850 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
12860 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54       if( pC->isT
12870 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  able==0 ){.     
12880 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
12890 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
128a0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
128b0 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
128c0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
128d0 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
128e0 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29   &payloadSize64)
128f0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
12900 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
12910 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75  ); /* True becau
12920 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
12930 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
12940 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71  */.        /* sq
12950 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43  lite3BtreeParseC
12960 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65  ellPtr() uses ge
12970 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65  tVarint32() to e
12980 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20  xtract the.     
12990 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
129a0 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
129b0 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
129c0 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
129d0 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65          ** large
129e0 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20  r than 32 bits. 
129f0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
12a00 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  t( (payloadSize6
12a10 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
12a20 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)==(u64)payloa
12a30 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20  dSize64 );.     
12a40 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
12a50 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
12a60 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
12a70 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
12a80 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33  ayloadSize = (u3
12a90 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  2)payloadSize64;
12aa0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12ab0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
12ac0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
12ad0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
12ae0 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
12af0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
12b00 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
12b10 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61  rsr, &pC->payloa
12b20 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20  dSize);.        
12b30 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
12b40 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61  TE_OK );   /* Da
12b50 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
12b60 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  fail */.        
12b70 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
12b80 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
12b90 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12ba0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
12bb0 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35  ssert( avail<=65
12bc0 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d  536 );  /* Maxim
12bd0 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  um page size is 
12be0 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69  64KiB */.      i
12bf0 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
12c00 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c  ze <= (u32)avail
12c10 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
12c20 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c  szRow = pC->payl
12c30 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d  oadSize;.      }
12c40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
12c50 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b  ->szRow = avail;
12c60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
12c70 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
12c80 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
12c90 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
12ca0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
12cb0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
12cc0 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  g;.      }.    }
12cd0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
12ce0 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
12cf0 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72  tr;.    pC->iHdr
12d00 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69  Offset = getVari
12d10 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f  nt32(pC->aRow, o
12d20 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e  ffset);.    pC->
12d30 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
12d40 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d      aOffset[0] =
12d50 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 69 66 28   offset;.    if(
12d60 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b   avail<offset ){
12d70 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
12d80 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
12d90 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
12da0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
12db0 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
12dc0 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
12dd0 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
12de0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
12df0 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
12e00 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
12e10 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
12e20 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
12e30 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
12e40 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
12e50 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
12e60 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
12e70 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
12e80 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
12e90 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
12ea0 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
12eb0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
12ec0 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
12ed0 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
12ee0 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
12ef0 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74  der..    ** Do t
12f00 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
12f10 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
12f20 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
12f30 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79      **.    ** Ty
12f40 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
12f50 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
12f60 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
12f70 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
12f80 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
12f90 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
12fa0 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
12fb0 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
12fc0 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a  and 32 of.    **
12fd0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
12fe0 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
12ff0 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
13000 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
13010 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20  a.    ** 3-byte 
13020 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
13030 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
13040 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
13050 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20  us three.    ** 
13060 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
13070 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
13080 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
13090 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
130a0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f      */.    if( o
130b0 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c  ffset > 98307 ||
130c0 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61   offset > pC->pa
130d0 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
130e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
130f0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
13100 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13110 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  n_error;.    }. 
13120 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
13130 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
13140 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
13150 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
13160 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
13170 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
13180 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
13190 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
131a0 20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20   aType[]..  */. 
131b0 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
131c0 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f  sed<=p2 ){.    /
131d0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f  * If there is mo
131e0 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61  re header availa
131f0 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20  ble for parsing 
13200 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74  in the record, t
13210 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74  ry.    ** to ext
13220 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20  ract additional 
13230 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67  fields up throug
13240 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69  h the p2+1-th fi
13250 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  eld .    */.    
13260 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
13270 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
13280 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
13290 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
132a0 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
132b0 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
132c0 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
132d0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
132e0 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
132f0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
13300 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
13310 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
13320 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
13330 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
13340 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20   aOffset[0], .  
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c     !pC->isTable,
13380 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
13390 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
133a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
133b0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
133c0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
133d0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
133e0 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
133f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13400 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
13410 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
13420 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
13430 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
13440 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
13450 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
13460 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20   field. */.     
13470 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72   i = pC->nHdrPar
13480 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65  sed;.      offse
13490 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a  t = aOffset[i];.
134a0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61        zHdr = zDa
134b0 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66  ta + pC->iHdrOff
134c0 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48  set;.      zEndH
134d0 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66  dr = zData + aOf
134e0 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61  fset[0];.      a
134f0 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20  ssert( i<=p2 && 
13500 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
13510 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
13520 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78    if( zHdr[0]<0x
13530 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
13540 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20  t = zHdr[0];.   
13550 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
13560 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
13570 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20          zHdr += 
13580 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
13590 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20  32(zHdr, &t);.  
135a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
135b0 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20  aType[i] = t;.  
135c0 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20        szField = 
135d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
135e0 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
135f0 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
13600 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20  zField;.        
13610 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65  if( offset<szFie
13620 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69  ld ){  /* True i
13630 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f  f offset overflo
13640 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ws */.          
13650 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b  zHdr = &zEndHdr[
13660 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53  1];  /* Forces S
13670 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65  QLITE_CORRUPT re
13680 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  turn below */.  
13690 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
136a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
136b0 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f   i++;.        aO
136c0 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65  ffset[i] = offse
136d0 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  t;.      }while(
136e0 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
136f0 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
13700 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
13710 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
13720 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
13730 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
13740 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
13750 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
13760 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
13770 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
13780 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67         sMem.flag
13790 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
137a0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
137b0 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61  * If we have rea
137c0 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61  d more header da
137d0 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74  ta than was cont
137e0 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61  ained in the hea
137f0 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72  der,.      ** or
13800 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
13810 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
13820 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
13830 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
13840 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c        ** record,
13850 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
13860 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
13870 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
13880 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
13890 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
138a0 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66  cord (when all f
138b0 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20  ields present), 
138c0 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20  then we must be 
138d0 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a  dealing .      *
138e0 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  * with a corrupt
138f0 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
13900 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
13910 48 64 72 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20  Hdr > zEndHdr). 
13920 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74        || (offset
13930 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
13940 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a  ze).       || (z
13950 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr==zEndHdr && 
13960 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c  offset!=pC->payl
13970 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
13980 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
13990 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
139a0 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
139b0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
139c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
139d0 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
139e0 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
139f0 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
13a00 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
13a10 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
13a20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
13a30 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
13a40 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
13a50 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
13a60 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
13a70 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
13a80 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
13a90 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
13aa0 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
13ab0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
13ac0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13ad0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
13ae0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
13af0 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
13b00 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
13b10 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
13b20 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
13b30 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
13b40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65  else{.        Me
13b50 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
13b60 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
13b70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
13b80 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13b90 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13ba0 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e   Extract the con
13bb0 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b  tent for the p2+
13bc0 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  1-th column.  Co
13bd0 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20  ntrol can only. 
13be0 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70   ** reach this p
13bf0 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b  oint if aOffset[
13c00 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b  p2], aOffset[p2+
13c10 31 5d 2c 20 61 6e 64 20 61 54 79 70 65 5b 70 32  1], and aType[p2
13c20 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
13c30 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
13c40 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
13c50 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
13c60 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
13c70 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
13c80 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
13c90 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
13ca0 73 74 29 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  st) );.  if( pC-
13cb0 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
13cc0 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
13cd0 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
13ce0 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
13cf0 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
13d00 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
13d10 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
13d20 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
13d30 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
13d40 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
13d50 65 20 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d  e */.    VdbeMem
13d60 52 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a  Release(pDest);.
13d70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13d80 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f  erialGet(pC->aRo
13d90 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  w+aOffset[p2], a
13da0 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
13db0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
13dc0 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61  * This branch ha
13dd0 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20  ppens only when 
13de0 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76  content is on ov
13df0 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a  erflow pages */.
13e00 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32      t = aType[p2
13e10 5d 3b 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  ];.    if( ((pOp
13e20 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
13e30 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
13e40 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
13e50 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
13e60 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
13e70 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
13e80 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
13e90 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
13ea0 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
13eb0 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
13ec0 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
13ed0 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
13ee0 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74  irrelevant for t
13ef0 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  he typeof() func
13f00 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20  tion and for.   
13f10 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68     ** the length
13f20 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
13f30 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f  X is a blob.  So
13f40 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
13f50 6c 20 75 73 65 0a 20 20 20 20 20 20 2a 2a 20 62  l use.      ** b
13f60 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74  ogus content rat
13f70 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67  her than reading
13f80 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
13f90 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a  sk.  NULL works.
13fa0 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74 65 78        ** for tex
13fb0 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77  t and blob and w
13fc0 68 61 74 65 76 65 72 20 69 73 20 69 6e 20 74 68  hatever is in th
13fd0 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  e payloadSize64 
13fe0 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a  variable.      *
13ff0 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  * will work for 
14000 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e  everything else.
14010 20 20 43 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73    Content is als
14020 6f 20 69 72 72 65 6c 65 76 61 6e 74 20 69 66 0a  o irrelevant if.
14030 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e        ** the con
14040 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 30  tent length is 0
14050 2e 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61  . */.      zData
14060 20 3d 20 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29   = t<=13 ? (u8*)
14070 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a  &payloadSize64 :
14080 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a   0;.      sMem.z
14090 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
140a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
140b0 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
140c0 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20  zeof(sMem));.   
140d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
140e0 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65  mMove(&sMem, pDe
140f0 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  st);.      rc = 
14100 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
14110 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
14120 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
14130 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20   !pC->isTable,. 
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20    &sMem);.      
14170 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
14180 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
14190 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
141a0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
141b0 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d   zData = (u8*)sM
141c0 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20  em.z;.    }.    
141d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
141e0 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
141f0 44 65 73 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66  Dest);.    /* If
14200 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   we dynamically 
14210 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
14220 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
14230 20 28 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20   (in the.    ** 
14240 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
14250 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61  omBtree() call a
14260 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73  bove) then trans
14270 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74  fer control of t
14280 68 61 74 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d  hat.    ** dynam
14290 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
142a0 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74   space over to t
142b0 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75  he pDest structu
142c0 72 65 2e 0a 20 20 20 20 2a 2a 20 54 68 69 73 20  re..    ** This 
142d0 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72  prevents a memor
142e0 79 20 63 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69  y copy. */.    i
142f0 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  f( sMem.zMalloc 
14300 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
14310 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d   sMem.z==sMem.zM
14320 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 20 20 61  alloc );.      a
14330 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
14340 6e 61 6d 69 63 28 70 44 65 73 74 29 3d 3d 30 20  namic(pDest)==0 
14350 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14360 20 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26   (pDest->flags &
14370 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
14380 74 72 29 29 3d 3d 30 20 7c 7c 20 70 44 65 73 74  tr))==0 || pDest
14390 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
143a0 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
143b0 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
143c0 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
143d0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
143e0 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
143f0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
14400 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65  Mem.z;.      pDe
14410 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d  st->zMalloc = sM
14420 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  em.zMalloc;.    
14430 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65  }.  }.  pDest->e
14440 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a  nc = encoding;..
14450 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
14460 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
14470 70 44 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d  pDest);.op_colum
14480 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54  n_error:.  UPDAT
14490 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
144a0 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
144b0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
144c0 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
144d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
144e0 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
144f0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
14500 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
14510 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c  @P2]).**.** Appl
14520 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
14530 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
14540 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
14550 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
14560 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
14570 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
14580 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
14590 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
145a0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
145b0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
145c0 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
145d0 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
145e0 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
145f0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
14600 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
14610 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
14620 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
14630 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
14640 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
14650 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
14660 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
14670 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
14680 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
14690 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
146a0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
146b0 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
146c0 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
146d0 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
146e0 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
146f0 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
14700 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
14710 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
14720 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
14730 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
14740 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
14750 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
14760 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
14770 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
14780 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
14790 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
147a0 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29   cAff, encoding)
147b0 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
147c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
147d0 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
147e0 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
147f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
14800 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
14810 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
14820 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
14830 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
14840 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
14850 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
14860 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
14870 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
14880 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
14890 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
148a0 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
148b0 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
148c0 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
148d0 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
148e0 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
148f0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
14900 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
14910 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
14920 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
14930 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
14940 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
14950 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
14960 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
14970 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
14980 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
14990 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
149a0 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
149b0 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
149c0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
149d0 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
149e0 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
149f0 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
14a00 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
14a10 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
14a20 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e  e the affinity N
14a30 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ONE..*/.case OP_
14a40 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
14a50 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
14a60 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
14a70 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
14a80 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
14a90 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
14aa0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
14ab0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
14ac0 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
14ad0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
14ae0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14af0 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
14b00 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14b20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14b30 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
14b40 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14b60 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
14b70 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
14b80 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
14b90 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
14ba0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
14bb0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
14bc0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14bd0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
14be0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14bf0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14c00 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
14c10 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
14c20 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
14c30 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
14c40 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
14c50 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
14c60 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
14c70 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
14c80 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
14c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
14ca0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
14cb0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14cc0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
14cd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14ce0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
14cf0 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
14d00 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
14d10 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
14d20 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
14d30 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14d40 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
14d50 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
14d60 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
14d70 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
14d80 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
14d90 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
14da0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
14db0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74   header */.  int
14dc0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
14dd0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
14de0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
14df0 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69  ] content */.  i
14e00 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
14e10 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
14e20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
14e30 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
14e40 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
14e50 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
14e60 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
14e70 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
14e80 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
14e90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ea0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14eb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ed0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
14ee0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
14ef0 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
14f00 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
14f10 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
14f20 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
14f30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f70 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
14f80 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
14f90 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
14fa0 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
14fb0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
14fc0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72  1.  ** and so fr
14fd0 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  oth..  **.  ** E
14fe0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
14ff0 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
15000 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
15010 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
15020 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
15030 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
15040 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
15050 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
15060 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
15070 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
15080 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
15090 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
150a0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
150b0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
150c0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
150d0 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
150e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
150f0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
15100 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
15110 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
15120 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
15130 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
15140 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
15150 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
15160 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
15170 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
15180 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
15190 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
151a0 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
151b0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
151c0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
151d0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
151e0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
151f0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
15200 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  r)+1 );.  pData0
15210 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
15220 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
15230 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
15240 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
15250 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
15260 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
15270 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
15280 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74  Identify the out
15290 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
152a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
152b0 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
152c0 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
152d0 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
152e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
152f0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
15300 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
15310 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72    /* Apply the r
15320 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74  equested affinit
15330 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a  y to all inputs.
15340 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
15350 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
15360 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
15370 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44  ){.    pRec = pD
15380 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20  ata0;.    do{.  
15390 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
153a0 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66  y(pRec++, *(zAff
153b0 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69  inity++), encodi
153c0 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ng);.      asser
153d0 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d  t( zAffinity[0]=
153e0 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73  =0 || pRec<=pLas
153f0 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28  t );.    }while(
15400 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b   zAffinity[0] );
15410 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  .  }..  /* Loop 
15420 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
15430 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
15440 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
15450 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
15460 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
15470 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
15480 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
15490 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20  rd..  */.  pRec 
154a0 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20  = pLast;.  do{. 
154b0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
154c0 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
154d0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
154e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
154f0 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
15500 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c  e_format);.    l
15510 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
15520 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65  SerialTypeLen(se
15530 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
15540 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
15550 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
15560 20 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b      if( nData ){
15570 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
15580 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
15590 62 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  b(pRec);.      }
155a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a  else{.        nZ
155b0 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
155c0 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65  Zero;.        le
155d0 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  n -= pRec->u.nZe
155e0 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ro;.      }.    
155f0 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  }.    nData += l
15600 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  en;.    testcase
15610 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
15620 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  27 );.    testca
15630 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
15640 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72  =128 );.    nHdr
15650 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c   += serial_type<
15660 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74  =127 ? 1 : sqlit
15670 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
15680 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69  al_type);.  }whi
15690 6c 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44  le( (--pRec)>=pD
156a0 61 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 41 64  ata0 );..  /* Ad
156b0 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65  d the initial he
156c0 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20  ader varint and 
156d0 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a  total the size *
156e0 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  /.  testcase( nH
156f0 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73  dr==126 );.  tes
15700 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37  tcase( nHdr==127
15710 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d   );.  if( nHdr<=
15720 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  126 ){.    /* Th
15730 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f  e common case */
15740 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a  .    nHdr += 1;.
15750 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
15760 52 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72  Rare case of a r
15770 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64  eally large head
15780 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e  er */.    nVarin
15790 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
157a0 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20  tLen(nHdr);.    
157b0 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b  nHdr += nVarint;
157c0 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74  .    if( nVarint
157d0 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
157e0 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b  n(nHdr) ) nHdr++
157f0 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
15800 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66  nHdr+nData;.  if
15810 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
15820 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
15830 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
15840 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
15850 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
15860 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
15870 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
15880 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
15890 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
158a0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
158b0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
158c0 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
158d0 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
158e0 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
158f0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
15900 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
15910 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
15920 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
15930 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20  MemGrow() could 
15940 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
15950 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
15960 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
15970 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
15980 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
15990 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
159a0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
159b0 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
159c0 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
159d0 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
159e0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
159f0 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
15a00 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
15a10 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65  j = nHdr;.  asse
15a20 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
15a30 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44  t );.  pRec = pD
15a40 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  ata0;.  do{.    
15a50 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71  serial_type = sq
15a60 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15a70 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66  ype(pRec, file_f
15a80 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d  ormat);.    i +=
15a90 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e   putVarint32(&zN
15aa0 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72  ewRecord[i], ser
15ab0 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20  ial_type);      
15ac0 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
15ad0 74 79 70 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  type */.    j +=
15ae0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15af0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
15b00 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
15b10 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
15b20 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
15b30 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
15b40 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
15b50 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
15b60 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
15b70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15b80 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
15b90 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
15ba0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
15bb0 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
15bc0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
15bd0 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 70 4f 75   MEM_Blob;.  pOu
15be0 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
15bf0 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
15c00 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
15c10 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
15c20 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
15c30 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
15c40 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
15c50 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
15c60 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
15c70 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
15c80 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
15c90 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
15ca0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
15cb0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
15cc0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
15cd0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
15ce0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
15cf0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
15d00 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  ount().**.** Sto
15d10 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  re the number of
15d20 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74   entries (an int
15d30 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74  eger value) in t
15d40 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
15d50 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  x .** opened by 
15d60 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67  cursor P1 in reg
15d70 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e  ister P2.*/.#ifn
15d80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15d90 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20  BTREECOUNT.case 
15da0 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20  OP_Count: {     
15db0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
15dc0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20  elease */.  i64 
15dd0 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73  nEntry;.  BtCurs
15de0 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43  or *pCrsr;..  pC
15df0 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
15e00 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72  Op->p1]->pCursor
15e10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
15e20 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20  r );.  nEntry = 
15e30 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
15e40 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
15e50 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
15e60 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
15e70 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
15e80 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
15e90 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e  .  pOut->u.i = n
15ea0 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a  Entry;.  break;.
15eb0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
15ec0 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50  ode: Savepoint P
15ed0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
15ee0 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f   Open, release o
15ef0 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73  r rollback the s
15f00 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62  avepoint named b
15f10 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20  y parameter P4, 
15f20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20  depending.** on 
15f30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e  the value of P1.
15f40 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73   To open a new s
15f50 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e  avepoint, P1==0.
15f60 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   To release (com
15f70 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74  mit) an.** exist
15f80 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  ing savepoint, P
15f90 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c  1==1, or to roll
15fa0 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67  back an existing
15fb0 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32   savepoint P1==2
15fc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76  ..*/.case OP_Sav
15fd0 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  epoint: {.  int 
15fe0 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p1;             
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16000 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61  alue of P1 opera
16010 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  nd */.  char *zN
16020 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
16030 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
16040 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a  of savepoint */.
16050 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53    int nName;.  S
16060 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a  avepoint *pNew;.
16070 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
16080 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70  vepoint;.  Savep
16090 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e  oint *pTmp;.  in
160a0 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  t iSavepoint;.  
160b0 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20  int ii;..  p1 = 
160c0 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65  pOp->p1;.  zName
160d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20   = pOp->p4.z;.. 
160e0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
160f0 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72  the p1 parameter
16100 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20   is valid. Also 
16110 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73  that if there is
16120 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72   no open.  ** tr
16130 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
16140 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20  there cannot be 
16150 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20  any savepoints. 
16160 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
16170 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d  db->pSavepoint==
16180 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  0 || db->autoCom
16190 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
161a0 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
161b0 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56  T_BEGIN||p1==SAV
161c0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c  EPOINT_RELEASE||
161d0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
161e0 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65  LLBACK );.  asse
161f0 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
16200 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e  nt || db->isTran
16210 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
16220 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16230 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
16240 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73  ount(db) );.  as
16250 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
16260 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  er );..  if( p1=
16270 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
16280 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
16290 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
162a0 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73        /* A new s
162b0 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20  avepoint cannot 
162c0 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68  be created if th
162d0 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
162e0 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73  rite .      ** s
162f0 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20  tatements (i.e. 
16300 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20  open read/write 
16310 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62  incremental blob
16320 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20   handles)..     
16330 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
16340 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16350 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
16360 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69  not open savepoi
16370 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  nt - ".        "
16380 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
16390 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
163a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
163b0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
163c0 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
163d0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
163e0 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
163f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
16400 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
16410 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
16420 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
16430 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
16440 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
16450 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
16460 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
16470 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
16480 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
16490 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
164a0 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
164b0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
164c0 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
164d0 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
164e0 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
164f0 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
16500 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
16510 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
16520 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
16530 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
16540 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
16550 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
16560 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
16570 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
16580 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
165b0 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
165c0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
165d0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
165e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
165f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
16600 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
16610 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
16620 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
16630 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
16640 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
16650 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  w(db, sizeof(Sav
16660 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
16670 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
16680 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
16690 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
166a0 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
166b0 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
166c0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
166d0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
166e0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
166f0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
16700 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
16710 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
16720 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
16730 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
16740 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
16750 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
16760 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
16770 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
16780 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
16790 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
167a0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
167b0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
167c0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
167d0 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
167e0 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20        }.    .   
167f0 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65       /* Link the
16800 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69   new savepoint i
16810 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
16820 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20   handle's list. 
16830 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  */.        pNew-
16840 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61  >pNext = db->pSa
16850 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
16860 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16870 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  = pNew;.        
16880 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43  pNew->nDeferredC
16890 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
168a0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
168b0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
168c0 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
168d0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
168e0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
168f0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
16900 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
16910 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
16920 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
16930 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
16940 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
16950 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
16960 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
16970 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
16980 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
16990 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
169a0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
169b0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
169c0 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
169d0 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
169e0 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
169f0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
16a00 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
16a10 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
16a20 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
16a30 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
16a40 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
16a50 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
16a60 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
16a70 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
16a80 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
16a90 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
16aa0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
16ab0 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
16ac0 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
16ad0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
16ae0 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
16af0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
16b00 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
16b10 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
16b20 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
16b30 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
16b40 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
16b50 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16b60 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
16b70 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
16b80 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e  b, .        "can
16b90 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65  not release save
16ba0 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
16bb0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
16bc0 73 73 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  ss".      );.   
16bd0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
16be0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
16bf0 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
16c00 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
16c10 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
16c20 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
16c30 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
16c40 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
16c50 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
16c60 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
16c70 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
16c80 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
16c90 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
16ca0 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
16cb0 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
16cc0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
16cd0 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
16ce0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
16cf0 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
16d00 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
16d10 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16d20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
16d30 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
16d40 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
16d50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
16d60 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16d70 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16d80 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
16d90 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
16da0 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16db0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
16dc0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
16dd0 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
16de0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64   pc;.          d
16df0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
16e00 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
16e10 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
16e20 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
16e30 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
16e40 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
16e50 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
16e60 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
16e70 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
16e80 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
16e90 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53  else{.        iS
16ea0 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
16eb0 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
16ec0 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
16ed0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
16ee0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
16ef0 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
16f00 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
16f10 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
16f20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
16f30 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
16f40 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
16f50 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a   SQLITE_ABORT);.
16f60 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
16f70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
16f80 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
16f90 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
16fa0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
16fb0 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
16fc0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
16fd0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
16fe0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
16ff0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
17000 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
17010 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17020 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
17030 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
17040 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
17050 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
17060 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  & (db->flags&SQL
17070 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
17080 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  s)!=0 ){.       
17090 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
170a0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
170b0 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
170c0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
170d0 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
170e0 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20  tion(db);.      
170f0 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20      db->flags = 
17100 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c  (db->flags | SQL
17110 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
17120 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  s);.        }.  
17130 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
17140 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
17150 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
17160 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
17170 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
17180 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
17190 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
171a0 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
171b0 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
171c0 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
171d0 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
171e0 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
171f0 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
17200 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
17210 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
17220 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
17230 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
17240 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
17250 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
17260 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
17270 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
17280 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
17290 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
172a0 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
172b0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
172c0 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20  perated on .    
172d0 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20    ** too. If it 
172e0 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  is a ROLLBACK TO
172f0 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e  , then set the n
17300 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
17310 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73  d .      ** cons
17320 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
17330 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
17340 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
17350 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20   value stored.  
17360 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20      ** when the 
17370 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72  savepoint was cr
17380 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20  eated.  */.     
17390 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
173a0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
173b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53        assert( pS
173c0 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53  avepoint==db->pS
173d0 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20  avepoint );.    
173e0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
173f0 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
17400 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
17410 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
17420 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , pSavepoint);. 
17430 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72         if( !isTr
17440 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
17450 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
17460 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20  point--;.       
17470 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
17480 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
17490 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76  erredCons = pSav
174a0 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
174b0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64  dCons;.        d
174c0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
174d0 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
174e0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
174f0 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ns;.      }..   
17500 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
17510 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
17520 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
17530 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
17540 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
17550 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
17560 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17570 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17580 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
17590 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
175a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
175b0 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
175c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
175d0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
175e0 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
175f0 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
17600 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
17610 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
17620 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
17630 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
17640 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
17650 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
17660 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
17670 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
17680 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
17690 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
176a0 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
176b0 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
176c0 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
176d0 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
176e0 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
176f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
17700 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
17710 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
17720 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
17730 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
17740 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
17750 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74  ollback;.  int t
17760 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69  urnOnAC;..  desi
17770 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
17780 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
17790 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
177a0 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73    turnOnAC = des
177b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
177c0 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
177d0 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  t;.  assert( des
177e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
177f0 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
17800 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
17810 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17820 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
17830 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
17840 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64   assert( db->nVd
17850 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f  beActive>0 );  /
17860 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
17870 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
17880 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
17890 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 23  >bIsReader );..#
178a0 69 66 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f  if 0.  if( turnO
178b0 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b  nAC && iRollback
178c0 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74   && db->nVdbeAct
178d0 69 76 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20  ive>1 ){.    /* 
178e0 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
178f0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
17900 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74   ROLLBACK and ot
17910 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20  her VMs are.    
17920 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  ** still running
17930 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74  , and a transact
17940 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72  ion is active, r
17950 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
17960 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a  ndicating.    **
17970 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
17980 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
17990 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
179a0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
179b0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
179c0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72  g, db, "cannot r
179d0 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
179e0 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
179f0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
17a00 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17a10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
17a20 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  USY;.  }else.#en
17a30 64 69 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e  dif.  if( turnOn
17a40 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b  AC && !iRollback
17a50 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69   && db->nVdbeWri
17a60 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  te>0 ){.    /* I
17a70 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
17a80 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
17a90 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72  COMMIT and other
17aa0 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67   VMs are writing
17ab0 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61  .    ** return a
17ac0 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
17ad0 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ng that the othe
17ae0 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
17af0 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
17b00 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
17b10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
17b20 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
17b30 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
17b40 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
17b50 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
17b60 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17b70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
17b80 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  USY;.  }else if(
17b90 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17ba0 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
17bb0 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
17bc0 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
17bd0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
17be0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
17bf0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
17c00 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51  llbackAll(db, SQ
17c10 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
17c20 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  ACK);.      db->
17c30 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
17c40 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72      }else if( (r
17c50 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
17c60 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
17c70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17c80 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17c90 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  rn;.    }else{. 
17ca0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17cb0 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65  mit = (u8)desire
17cc0 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20  dAutoCommit;.   
17cd0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
17ce0 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
17cf0 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
17d00 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
17d10 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17d20 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65  mmit = (u8)(1-de
17d30 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
17d40 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20  ;.        p->rc 
17d50 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
17d60 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  SY;.        goto
17d70 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17d80 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
17d90 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
17da0 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  tement==0 );.   
17db0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
17dc0 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20  epoints(db);.   
17dd0 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
17de0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
17df0 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  c = SQLITE_DONE;
17e00 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17e10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
17e20 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ROR;.    }.    g
17e30 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17e40 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
17e50 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
17e60 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a  p->zErrMsg, db,.
17e70 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
17e80 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
17e90 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
17ea0 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
17eb0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
17ec0 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62  .        (iRollb
17ed0 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c  ack)?"cannot rol
17ee0 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
17ef0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
17f00 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ":.             
17f10 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f        "cannot co
17f20 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
17f30 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
17f40 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20  ));.         .  
17f50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
17f60 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ROR;.  }.  break
17f70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17f80 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50  Transaction P1 P
17f90 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17fa0 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63   Begin a transac
17fb0 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65  tion on database
17fc0 20 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63   P1 if a transac
17fd0 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65  tion is not alre
17fe0 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a  ady.** active..*
17ff0 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
18000 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
18010 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
18020 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20   started, or if 
18030 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73  a .** read-trans
18040 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64  action is alread
18050 79 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20  y active, it is 
18060 75 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72  upgraded to a wr
18070 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ite-transaction.
18080 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
18090 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74  o, then a read-t
180a0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
180b0 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  arted..**.** P1 
180c0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
180d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
180e0 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
180f0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
18100 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
18110 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
18120 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
18130 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
18140 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
18150 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18160 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
18170 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
18180 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
18190 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
181a0 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
181b0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
181c0 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
181d0 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
181e0 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
181f0 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
18200 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
18210 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
18220 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
18230 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
18240 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
18250 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
18260 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
18270 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
18280 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
18290 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
182a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
182b0 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
182c0 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
182d0 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
182e0 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
182f0 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
18300 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
18310 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
18320 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
18330 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
18340 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
18350 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
18360 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
18370 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
18380 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
18390 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
183a0 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
183b0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
183c0 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
183d0 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
183e0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
183f0 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
18400 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
18410 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
18420 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
18430 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20  P5!=0 then this 
18440 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63  opcode also chec
18450 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks the schema co
18460 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a  okie against P3.
18470 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d  ** and the schem
18480 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  a generation cou
18490 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e  nter against P4.
184a0 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
184b0 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
184c0 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
184d0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
184e0 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
184f0 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
18500 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
18510 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
18520 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
18530 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
18540 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
18550 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
18560 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20  schema.  If the 
18570 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65  schema.** cookie
18580 20 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66   in P3 differs f
18590 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63  rom the schema c
185a0 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74  ookie in the dat
185b0 61 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a  abase header or.
185c0 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  ** if the schema
185d0 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
185e0 74 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72  ter in P4 differ
185f0 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  s from the curre
18600 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e  nt.** generation
18610 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61   counter, then a
18620 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  n SQLITE_SCHEMA 
18630 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20  error is raised 
18640 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a  and execution.**
18650 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c   halts.  The sql
18660 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70  ite3_step() wrap
18670 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67  per function mig
18680 68 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72  ht then reprepar
18690 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65  e the.** stateme
186a0 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20  nt and rerun it 
186b0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
186c0 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ng..*/.case OP_T
186d0 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
186e0 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e  Btree *pBt;.  in
186f0 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
18700 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Gen;..  assert( 
18710 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
18720 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
18730 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d  dOnly==0 || pOp-
18740 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p2==0 );.  asse
18750 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
18760 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
18770 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
18780 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
18790 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
187a0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
187b0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
187c0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
187d0 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
187e0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
187f0 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
18800 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18810 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
18820 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
18830 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
18840 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
18850 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18860 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
18870 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
18880 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
18890 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
188a0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
188b0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
188c0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
188d0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
188e0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
188f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18900 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18910 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18920 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
18930 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
18940 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
18950 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
18960 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
18970 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
18980 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
18990 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
189a0 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
189b0 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
189c0 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
189d0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
189e0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
189f0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
18a00 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
18a10 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
18a20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
18a30 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
18a40 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
18a50 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
18a60 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
18a70 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18a80 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18a90 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
18aa0 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
18ab0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
18ac0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
18ad0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
18ae0 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
18af0 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
18b00 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
18b10 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
18b20 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
18b30 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
18b40 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
18b50 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
18b60 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
18b70 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18b80 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
18b90 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
18ba0 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
18bb0 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
18bc0 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
18bd0 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
18be0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
18bf0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18c00 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
18c10 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
18c20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
18c30 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
18c40 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
18c50 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
18c60 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
18c70 69 6e 67 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ing */.    sqlit
18c80 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
18c90 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
18ca0 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
18cb0 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
18cc0 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
18cd0 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
18ce0 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
18cf0 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
18d00 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
18d10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
18d20 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  ==0 || pOp->p4ty
18d30 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
18d40 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26    if( pOp->p5 &&
18d50 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33   (iMeta!=pOp->p3
18d60 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70   || iGen!=pOp->p
18d70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  4.i) ){.    sqli
18d80 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
18d90 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
18da0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
18db0 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
18dc0 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
18dd0 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
18de0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
18df0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
18e00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
18e10 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
18e20 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
18e30 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
18e40 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
18e50 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
18e60 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
18e70 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
18e80 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
18e90 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
18ea0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
18eb0 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
18ec0 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
18ed0 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
18ee0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
18ef0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
18f00 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
18f10 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
18f20 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
18f30 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
18f40 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
18f50 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
18f60 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
18f70 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
18f80 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
18f90 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
18fa0 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
18fb0 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
18fc0 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
18fd0 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
18fe0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
18ff0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
19000 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
19010 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
19020 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
19030 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
19040 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
19050 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
19060 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
19070 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
19080 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
19090 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
190a0 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
190b0 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
190c0 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
190d0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
190e0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
190f0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
19100 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
19110 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
19120 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65  ;.    }.    p->e
19130 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
19140 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
19150 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
19160 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
19170 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
19180 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
19190 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
191a0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
191b0 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
191c0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
191d0 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
191e0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
191f0 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
19200 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
19210 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
19220 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
19230 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
19240 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
19250 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
19260 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
19270 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
19280 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19290 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
192a0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
192b0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
192c0 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
192d0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
192e0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
192f0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
19300 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
19310 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
19320 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
19330 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
19340 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
19350 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
19360 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
19370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
19380 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
19390 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
193a0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
193b0 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
193c0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
193d0 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
193e0 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
193f0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
19400 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
19410 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
19420 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
19430 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
19440 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
19450 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
19460 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19470 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
19480 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
19490 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71  Db))!=0 );..  sq
194a0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
194b0 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
194c0 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
194d0 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
194e0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
194f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19500 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
19510 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19520 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
19530 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19540 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
19550 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
19560 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
19570 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
19580 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
19590 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
195a0 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
195b0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
195c0 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
195d0 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
195e0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
195f0 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
19600 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
19610 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
19620 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
19630 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
19640 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
19650 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
19660 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
19670 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
19680 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
19690 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
196a0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
196b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
196c0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
196d0 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
196e0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
196f0 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
19700 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
19710 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19720 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
19730 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19740 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
19750 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
19760 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
19770 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
19780 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
19790 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
197a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
197b0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
197c0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
197d0 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
197e0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
197f0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
19800 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
19810 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
19820 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
19830 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
19840 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
19850 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
19860 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
19870 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
19880 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
19890 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
198a0 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
198b0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
198c0 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
198d0 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
198e0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
198f0 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
19900 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
19910 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
19920 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
19930 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
19940 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
19950 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
19960 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
19970 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
19980 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
19990 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
199a0 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
199b0 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
199c0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
199d0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
199e0 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
199f0 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
19a00 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
19a10 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
19a20 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
19a30 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
19a40 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
19a50 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
19a60 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
19a70 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
19a80 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
19a90 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
19aa0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
19ab0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
19ac0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19ad0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
19ae0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19af0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
19b00 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
19b10 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
19b20 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
19b30 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
19b40 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
19b50 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
19b60 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
19b70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19b80 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
19b90 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
19ba0 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
19bb0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
19bc0 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
19bd0 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
19be0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
19bf0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
19c00 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
19c10 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
19c20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
19c30 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
19c40 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
19c50 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
19c60 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
19c70 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
19c80 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
19c90 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
19ca0 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
19cb0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
19cc0 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
19cd0 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
19ce0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
19cf0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
19d00 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
19d10 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
19d20 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
19d30 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
19d40 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
19d50 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
19d60 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
19d70 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
19d80 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
19d90 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
19da0 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
19db0 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
19dc0 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
19dd0 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
19de0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
19df0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19e00 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
19e10 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
19e20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
19e30 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
19e40 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
19e50 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
19e60 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
19e70 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
19e80 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
19e90 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
19ea0 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
19eb0 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
19ec0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
19ed0 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
19ee0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
19ef0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
19f00 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
19f10 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
19f20 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
19f30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
19f40 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
19f50 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
19f60 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
19f70 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
19f80 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
19f90 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
19fa0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
19fb0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
19fc0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
19fd0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
19fe0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
19ff0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1a000 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1a010 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1a020 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1a030 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1a040 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1a050 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1a060 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1a070 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1a080 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1a090 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a  also OpenWrite..
1a0a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
1a0b0 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
1a0c0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1a0d0 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1a0e0 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1a0f0 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
1a100 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68  r named P1 on th
1a110 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1a120 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70   whose root.** p
1a130 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69  age is P2.  Or i
1a140 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20  f P5!=0 use the 
1a150 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1a160 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74  ter P2 to find t
1a170 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e  he.** root page.
1a180 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1a190 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1a1a0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1a1b0 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1a1c0 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1a1d0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1a1e0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1a1f0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1a200 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1a210 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
1a220 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
1a230 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1a240 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1a250 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1a260 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
1a270 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
1a280 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
1a290 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
1a2a0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
1a2b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1a2c0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
1a2d0 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a  ble, or to the.*
1a2e0 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20  * largest index 
1a2f0 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66  of any column of
1a300 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
1a310 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  is actually used
1a320 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
1a330 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a  truction works j
1a340 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61  ust like OpenRea
1a350 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
1a360 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
1a370 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69  r.** in read/wri
1a380 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20  te mode.  For a 
1a390 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65  given table, the
1a3a0 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72  re can be one or
1a3b0 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a   more read-only.
1a3c0 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20  ** cursors or a 
1a3d0 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74  single read/writ
1a3e0 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74  e cursor but not
1a3f0 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   both..**.** See
1a400 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a   also OpenRead..
1a410 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
1a420 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
1a430 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20  nWrite: {.  int 
1a440 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
1a450 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
1a460 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
1a470 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
1a480 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
1a490 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
1a4a0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
1a4b0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26  ssert( (pOp->p5&
1a4c0 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c  (OPFLAG_P2ISREG|
1a4d0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29  OPFLAG_BULKCSR))
1a4e0 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61  ==pOp->p5 );.  a
1a4f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1a500 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1a510 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   || pOp->p5==0 )
1a520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1a530 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1a540 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1a550 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1a560 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1a570 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1a580 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1a590 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
1a5a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
1a5b0 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1a5c0 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1a5d0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1a5e0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1a5f0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1a600 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1a610 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
1a620 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
1a630 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
1a640 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
1a650 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
1a660 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
1a670 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
1a680 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1a690 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1a6a0 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
1a6b0 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
1a6c0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1a6d0 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1a6e0 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1a6f0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1a700 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1a710 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1a720 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1a730 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1a740 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1a750 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1a760 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1a770 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1a780 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1a790 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1a7a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1a7b0 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1a7c0 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ( p2<=(p->nMem-p
1a7d0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1a7e0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1a7f0 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
1a800 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
1a810 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1a820 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
1a830 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
1a840 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1a850 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
1a860 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
1a870 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
1a880 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
1a890 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
1a8a0 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
1a8b0 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
1a8c0 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
1a8d0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1a8e0 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
1a8f0 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
1a900 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
1a910 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
1a920 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
1a930 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
1a940 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
1a950 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
1a960 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
1a970 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1a980 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
1a990 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
1a9a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1a9b0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1a9c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a9d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a9e0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1a9f0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1aa00 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
1aa10 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1aa20 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74  Info;.    assert
1aa30 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1aa40 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1aa50 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1aa60 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1aa70 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
1aa80 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
1aa90 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
1aaa0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1aab0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1aac0 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1aad0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1aae0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1aaf0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ab00 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1ab10 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1ab20 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1ab30 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1ab40 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1ab50 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1ab60 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1ab70 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1ab80 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
1ab90 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1aba0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1abb0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1abc0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1abd0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  dered = 1;.  rc 
1abe0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1abf0 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46  rsor(pX, p2, wrF
1ac00 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70  lag, pKeyInfo, p
1ac10 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
1ac20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
1ac30 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  = pKeyInfo;.  as
1ac40 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
1ac50 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
1ac60 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65  LOAD );.  sqlite
1ac70 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1ac80 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c  s(pCur->pCursor,
1ac90 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
1aca0 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20  AG_BULKCSR));.. 
1acb0 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72   /* Since it per
1acc0 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20  forms no memory 
1acd0 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f  allocation or IO
1ace0 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65  , the only value
1acf0 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74   that.  ** sqlit
1ad00 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1ad10 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53 51  may return is SQ
1ad20 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73  LITE_OK. */.  as
1ad30 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1ad40 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  _OK );..  /* Set
1ad50 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1ad60 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1ad70 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1ad80 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1ad90 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1ada0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1adb0 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1adc0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1add0 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1ade0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1adf0 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1ae00 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1ae10 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1ae20 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1ae30 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1ae40 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1ae50 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1ae60 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1ae70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ae80 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1ae90 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1aea0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1aeb0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1aec0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1aed0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1aee0 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1aef0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1af00 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1af10 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1af20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1af30 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1af40 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1af50 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1af60 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1af70 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1af80 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1af90 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1afa0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1afb0 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1afc0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1afd0 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1afe0 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1aff0 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1b000 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1b010 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1b020 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1b030 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1b040 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1b050 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1b060 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1b070 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1b080 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1b090 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1b0a0 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1b0b0 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1b0c0 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1b0d0 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1b0e0 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1b0f0 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1b100 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1b110 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1b120 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1b130 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1b140 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1b150 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1b160 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1b170 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1b180 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1b190 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1b1a0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1b1b0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1b1c0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1b1d0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1b1e0 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1b1f0 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1b200 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1b210 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1b220 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1b230 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1b240 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1b250 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1b260 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1b270 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1b280 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1b290 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1b2a0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1b2b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b2c0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1b2d0 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1b2e0 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1b2f0 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1b300 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1b310 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1b320 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1b330 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b340 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1b350 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1b360 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1b370 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b380 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1b390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b3a0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1b3b0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1b3c0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1b3d0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1b3e0 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1b3f0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1b400 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1b410 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1b420 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1b430 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20  meral = 1;.  rc 
1b440 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1b450 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1b460 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1b490 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1b4a0 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1b4b0 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1b4c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1b4d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1b4e0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1b4f0 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1b500 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1b510 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1b520 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1b530 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1b540 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1b550 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1b560 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1b570 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1b580 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1b590 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1b5a0 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1b5b0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1b5c0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1b5d0 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1b5e0 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1b5f0 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1b600 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1b610 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1b620 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1b630 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1b640 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b650 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1b660 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1b670 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1b680 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b690 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1b6a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b6b0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1b6c0 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1b6d0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1b6e0 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1b6f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1b700 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1b710 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1b720 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1b730 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b740 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1b750 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1b760 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1b770 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1b780 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1b790 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1b7a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b7b0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1b7c0 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
1b7d0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70  pKeyInfo, pCx->p
1b7e0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1b7f0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1b800 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1b810 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1b820 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1b830 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1b840 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1b850 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1b860 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1b870 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1b880 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1b890 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1b8a0 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1b8b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b8c0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1b8d0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1b8e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1b8f0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1b900 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1b910 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1b920 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1b930 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1b940 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1b950 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1b960 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1b970 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1b980 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1b990 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72  thm..**.** If ar
1b9a0 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e  gument P3 is non
1b9b0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69  -zero, then it i
1b9c0 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
1b9d0 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20  e sorter may.** 
1b9e0 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74  assume that a st
1b9f0 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64  able sort consid
1ba00 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ering the first 
1ba10 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63  P3 fields of eac
1ba20 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66  h.** key is suff
1ba30 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63  icient to produc
1ba40 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72  e the required r
1ba50 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20  esults..*/.case 
1ba60 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1ba70 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ba80 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1ba90 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1baa0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1bab0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1bac0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1bad0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1bae0 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1baf0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1bb00 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1bb10 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1bb20 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1bb30 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1bb40 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1bb50 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1bb60 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1bb70 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1bb80 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1bb90 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1bba0 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Cx);.  break;.}.
1bbb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1bbc0 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a  enceTest P1 P2 *
1bbd0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1bbe0 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d  : if( cursor[P1]
1bbf0 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32  .ctr++ ) pc = P2
1bc00 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
1bc10 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66  orter cursor. If
1bc20 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f   the sequence co
1bc30 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
1bc40 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a  ly zero, jump.**
1bc50 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65   to P2. Regardle
1bc60 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
1bc70 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
1bc80 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e   taken, incremen
1bc90 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71  t the.** the seq
1bca0 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a  uence value..*/.
1bcb0 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1bcc0 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  Test: {.  VdbeCu
1bcd0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
1bce0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1bcf0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1bd00 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1bd10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1bd20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1bd30 70 53 6f 72 74 65 72 20 29 3b 0a 20 20 69 66 28  pSorter );.  if(
1bd40 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b   (pC->seqCount++
1bd50 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
1bd60 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1bd70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1bd80 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
1bd90 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
1bda0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33  .** Synopsis: P3
1bdb0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32   columns in r[P2
1bdc0 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ].**.** Open a n
1bdd0 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
1bde0 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
1bdf0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
1be00 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
1be10 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
1be20 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
1be30 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65  t one row is the
1be40 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
1be50 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
1be60 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
1be70 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
1be80 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
1be90 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
1bea0 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
1beb0 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
1bec0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
1bed0 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
1bee0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
1bef0 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
1bf00 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
1bf10 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
1bf20 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
1bf30 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
1bf40 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
1bf50 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
1bf60 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
1bf70 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1bf80 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
1bf90 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
1bfa0 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
1bfb0 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
1bfc0 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
1bfd0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
1bfe0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
1bff0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
1c000 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
1c010 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
1c020 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
1c030 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1c040 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
1c050 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1c060 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1c070 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c080 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20  pOp->p3>=0 );.  
1c090 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1c0a0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1c0b0 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29   pOp->p3, -1, 0)
1c0c0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1c0d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1c0e0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1c0f0 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54  ;.  pCx->pseudoT
1c100 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70  ableReg = pOp->p
1c110 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
1c120 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28  e = 1;.  assert(
1c130 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1c140 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c150 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1c160 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1c170 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1c180 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1c190 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1c1a0 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1c1b0 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1c1c0 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1c1d0 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1c1e0 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1c1f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c200 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c210 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1c220 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1c230 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1c240 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1c250 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1c260 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c270 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32  de: SeekGe P1 P2
1c280 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1c290 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1c2a0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1c2b0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1c2c0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1c2d0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1c2e0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1c2f0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1c300 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1c310 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1c320 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c330 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1c340 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1c350 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1c360 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1c370 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1c380 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1c390 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1c3a0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1c3b0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1c3c0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1c3d0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1c3e0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1c3f0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1c400 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1c410 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1c420 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1c430 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1c440 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1c450 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1c460 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1c470 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1c480 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1c490 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1c4a0 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
1c4b0 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1c4c0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1c4d0 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kGt P1 P2 P3 P4 
1c4e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1c4f0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1c500 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1c510 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1c520 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1c530 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1c540 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1c550 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1c560 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1c570 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1c580 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1c590 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1c5a0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1c5b0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1c5c0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1c5d0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1c5e0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1c5f0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1c600 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1c610 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1c620 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1c630 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1c640 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1c650 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1c660 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1c670 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1c680 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1c690 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1c6a0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1c6b0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1c6c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1c6d0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1c6e0 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
1c6f0 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1c700 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1c710 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  t P1 P2 P3 P4 * 
1c720 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1c730 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1c740 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c750 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1c760 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1c770 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1c780 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1c790 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1c7a0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1c7b0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c7c0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1c7d0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1c7e0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1c7f0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1c800 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1c810 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1c820 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1c830 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1c840 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1c850 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1c860 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1c870 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1c880 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1c890 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1c8a0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1c8b0 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1c8c0 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1c8d0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1c8e0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1c8f0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1c900 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c910 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1c920 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1c930 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1c940 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20  e: SeekLe P1 P2 
1c950 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1c960 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1c970 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1c980 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1c990 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1c9a0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1c9b0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1c9c0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1c9d0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1c9e0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1c9f0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1ca00 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1ca10 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1ca20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1ca30 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1ca40 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1ca50 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1ca60 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1ca70 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1ca80 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1ca90 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1caa0 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1cab0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1cac0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1cad0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1cae0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1caf0 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1cb00 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1cb10 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1cb20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1cb30 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1cb40 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1cb50 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1cb60 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1cb70 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1cb80 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  Lt.*/.case OP_Se
1cb90 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLT:         /*
1cba0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1cbb0 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20  se OP_SeekLE:   
1cbc0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1cbd0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1cbe0 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekGE:         /*
1cbf0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1cc00 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20  se OP_SeekGT: { 
1cc10 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1cc20 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
1cc30 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62  .  int oc;.  Vdb
1cc40 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55  eCursor *pC;.  U
1cc50 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1cc60 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1cc70 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1cc80 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
1cc90 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
1cca0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
1ccb0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1ccc0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1ccd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cce0 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
1ccf0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1cd00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1cd10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1cd20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1cd30 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
1cd40 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20  t( OP_SeekLE == 
1cd50 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20  OP_SeekLT+1 );. 
1cd60 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1cd70 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GE == OP_SeekLT+
1cd80 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  2 );.  assert( O
1cd90 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53  P_SeekGT == OP_S
1cda0 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73  eekLT+3 );.  ass
1cdb0 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
1cdc0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
1cdd0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1cde0 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  oc = pOp->op
1cdf0 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  code;.  pC->null
1ce00 52 6f 77 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  Row = 0;.  if( p
1ce10 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
1ce20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1ce30 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1ce40 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1ce50 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1ce60 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62  string,.    ** b
1ce70 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1ce80 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1ce90 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1cea0 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1ceb0 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1cec0 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a  o covert it. */.
1ced0 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1cee0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61  [pOp->p3];.    a
1cef0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1cf00 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 69  ity(pIn3);.    i
1cf10 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1cf20 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
1cf30 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1cf40 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20  Valid = 0;..    
1cf50 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1cf60 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1cf70 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1cf80 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1cf90 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66  t.    ** loss of
1cfa0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1cfb0 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1cfc0 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1cfd0 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  d... */.    if( 
1cfe0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1cff0 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1d000 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1d010 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1d020 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
1d030 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1d040 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1d050 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1d060 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1d070 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
1d080 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1d090 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1d0a0 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1d0b0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1d0c0 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
1d0d0 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
1d0e0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1d0f0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1d100 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1d110 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
1d120 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1d130 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1d140 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1d150 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
1d160 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
1d170 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
1d180 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
1d190 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
1d1a0 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
1d1b0 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
1d1c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1d1d0 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
1d1e0 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
1d1f0 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1d200 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
1d210 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
1d220 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
1d230 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29  pIn3->r<(double)
1d240 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1d250 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1d260 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29  E==(OP_SeekGT-1)
1d270 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d280 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28  rt( OP_SeekLT==(
1d290 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a  OP_SeekLE-1) );.
1d2a0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d2b0 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30  (OP_SeekLE & 0x0
1d2c0 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1d2d0 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1d2e0 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1d2f0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1d300 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kGT & 0x0001) ) 
1d310 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  oc--;.      }.. 
1d320 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
1d330 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
1d340 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61  y is smaller tha
1d350 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1d360 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1d370 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1d380 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20  te <= for < and 
1d390 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20  > for >=.  */.  
1d3a0 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e      else if( pIn
1d3b0 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65  3->r>(double)iKe
1d3c0 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1d3d0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d  ert( OP_SeekLE==
1d3e0 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b  (OP_SeekLT+1) );
1d3f0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1d400 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f   OP_SeekGT==(OP_
1d410 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20  SeekGE+1) );.   
1d420 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1d430 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1d440 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20  )==(OP_SeekGE & 
1d450 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1d460 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1d470 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  001)==(OP_SeekLT
1d480 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b   & 0x0001) ) oc+
1d490 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  +;.      }.    }
1d4a0 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
1d4b0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1d4c0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1d4d0 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1d4e0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1d4f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1d500 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1d510 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d520 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
1d530 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1d540 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d550 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 43 2d  d = 1;.      pC-
1d560 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65  >lastRowid = iKe
1d570 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  y;.    }.  }else
1d580 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1d590 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73  Op->p4.i;.    as
1d5a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1d5b0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1d5c0 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
1d5d0 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  d>0 );.    r.pKe
1d5e0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1d5f0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1d600 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
1d610 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;..    /* The ne
1d620 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
1d630 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
1d640 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
1d650 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f  :.    **   if( o
1d660 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c==OP_SeekGT || 
1d670 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b  oc==OP_SeekLE ){
1d680 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1d690 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
1d6a0 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1d6b0 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1d6c0 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20  ult_rc = +1;.   
1d6d0 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
1d6e0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1d6f0 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50  = ((1 & (oc - OP
1d700 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a  _SeekLT)) ? -1 :
1d710 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74   +1);.    assert
1d720 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc!=OP_SeekGT 
1d730 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1d740 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1d750 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45  t( oc!=OP_SeekLE
1d760 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1d770 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
1d780 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1d790 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
1d7a0 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  c==+1 );.    ass
1d7b0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d7c0 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LT || r.default_
1d7d0 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72  rc==+1 );..    r
1d7e0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1d7f0 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
1d800 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1d810 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1d820 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1d830 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1d840 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1d850 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1d860 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61    ExpandBlob(r.a
1d870 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  Mem);.    rc = s
1d880 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1d890 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1d8a0 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1d8b0 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
1d8c0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1d8d0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1d8e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d8f0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f      }.    pC->ro
1d900 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1d910 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
1d920 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1d930 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1d940 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
1d950 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1d960 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
1d970 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1d980 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
1d990 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
1d9a0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
1d9b0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1d9c0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
1d9d0 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1d9e0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
1d9f0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
1da00 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1da10 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1da20 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1da30 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1da40 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1da50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1da60 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72  ror;.      pC->r
1da70 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1da80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1da90 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
1daa0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1dab0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1dac0 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
1dad0 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
1dae0 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1daf0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1db00 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1db10 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1db20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1db30 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  ious(pC->pCursor
1db40 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1db50 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1db60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1db70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1db80 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1db90 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  id = 0;.    }els
1dba0 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20  e{.      /* res 
1dbb0 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
1dbc0 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
1dbd0 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
1dbe0 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a  heck to.      **
1dbf0 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1dc00 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1dc10 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73  */.      res = s
1dc20 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
1dc30 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  C->pCursor);.   
1dc40 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28   }.  }.  assert(
1dc50 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
1dc60 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1dc70 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
1dc80 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
1dc90 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1dca0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1dcb0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1dcc0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1dcd0 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72  opsis:  intkey=r
1dce0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P2].**.** P1 is
1dcf0 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63   an open table c
1dd00 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1dd10 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e  a rowid integer.
1dd20 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72    Arrange.** for
1dd30 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74   P1 to move so t
1dd40 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1dd50 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e   the rowid given
1dd60 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P2..**.** Th
1dd70 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1dd80 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
1dd90 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
1dda0 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
1ddb0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
1ddc0 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
1ddd0 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
1dde0 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
1ddf0 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
1de00 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
1de10 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ens..*/.case OP_
1de20 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  Seek: {    /* in
1de30 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
1de40 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1de50 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1de60 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1de70 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1de80 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1de90 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1dea0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1deb0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1dec0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1ded0 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  able );.  pC->nu
1dee0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e  llRow = 0;.  pIn
1def0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
1df00 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  2];.  pC->moveto
1df10 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33  Target = sqlite3
1df20 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1df30 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49  2);.  pC->rowidI
1df40 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
1df50 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1df60 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 1;.  break;.}
1df70 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
1df80 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1df90 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1dfa0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1dfb0 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1dfc0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1dfd0 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1dfe0 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1dff0 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1e000 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1e010 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1e020 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1e030 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1e040 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1e050 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
1e060 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1e070 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1e080 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1e090 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1e0a0 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
1e0b0 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1e0c0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1e0d0 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
1e0e0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1e0f0 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
1e100 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
1e110 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1e120 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
1e130 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65  , NotExists. See
1e140 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kGe.*/./* Opcode
1e150 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32  : NotFound P1 P2
1e160 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1e170 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1e180 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1e190 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1e1a0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1e1b0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1e1c0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1e1d0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1e1e0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1e1f0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1e200 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1e210 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1e220 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1e230 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1e240 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1e250 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1e260 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1e270 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
1e280 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
1e290 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1e2a0 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1e2b0 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
1e2c0 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
1e2d0 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
1e2e0 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
1e2f0 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
1e300 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
1e310 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1e320 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1e330 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
1e340 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1e350 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
1e360 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ntry..**.** See 
1e370 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1e380 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69  Exists, NoConfli
1e390 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ct.*/./* Opcode:
1e3a0 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50   NoConflict P1 P
1e3b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1e3c0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1e3d0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1e3e0 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1e3f0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1e400 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1e410 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1e420 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1e430 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1e440 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1e450 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1e460 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1e470 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1e480 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1e490 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1e4a0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1e4b0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1e4c0 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  d P4.** contains
1e4d0 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c   any NULL value,
1e4e0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1e4f0 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c  y to P2.  If all
1e500 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a   terms of the.**
1e510 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d   record are not-
1e520 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63  NULL then a chec
1e530 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74  k is done to det
1e540 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f  ermine if any ro
1e550 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69  w in the.** P1 i
1e560 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61  ndex btree has a
1e570 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72   matching key pr
1e580 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20  efix.  If there 
1e590 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20  are no matches, 
1e5a0 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  jump.** immediat
1e5b0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ely to P2.  If t
1e5c0 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c  here is a match,
1e5d0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e   fall through an
1e5e0 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a  d leave the P1.*
1e5f0 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  * cursor pointin
1e600 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e  g to the matchin
1e610 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  g row..**.** Thi
1e620 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69  s opcode is simi
1e630 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75  lar to OP_NotFou
1e640 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65  nd with the exce
1e650 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a  ptions that the.
1e660 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77  ** branch is alw
1e670 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79  ays taken if any
1e680 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61   part of the sea
1e690 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73  rch key input is
1e6a0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   NULL..**.** See
1e6b0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1e6c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1e6d0 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
1e6e0 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
1e6f0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1e700 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
1e710 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1e720 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
1e730 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1e740 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1e750 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
1e760 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
1e770 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1e780 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
1e790 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
1e7a0 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1e7b0 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1e7c0 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1e7d0 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1e7e0 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1e7f0 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1e800 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*4 + 7];..#if
1e810 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1e820 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1e830 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
1e840 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
1e850 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1e860 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e870 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e880 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e890 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e8a0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1e8b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1e8c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1e8d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1e8e0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1e8f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1e900 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1e910 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1e920 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
1e930 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20 20 2f  .  pFree = 0;  /
1e940 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
1e950 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75 70 70  nly used to supp
1e960 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65 72 20  ress a compiler 
1e970 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69 66  warning. */.  if
1e980 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
1e990 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1e9a0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1e9b0 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1e9c0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
1e9d0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
1e9e0 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  ;.    for(ii=0; 
1e9f0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
1ea00 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
1ea10 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1ea20 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
1ea30 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72     ExpandBlob(&r
1ea40 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64  .aMem[ii]);.#ifd
1ea50 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1ea60 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
1ea70 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1ea80 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
1ea90 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  m[ii]);.#endif. 
1eaa0 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79     }.    pIdxKey
1eab0 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = &r;.  }else{.
1eac0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
1ead0 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e  lite3VdbeAllocUn
1eae0 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20  packedRecord(.  
1eaf0 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e        pC->pKeyIn
1eb00 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69  fo, aTempRec, si
1eb10 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20  zeof(aTempRec), 
1eb20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 20 0a 20  &pFree.    ); . 
1eb30 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
1eb40 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1eb50 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
1eb60 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
1eb70 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  lob );.    asser
1eb80 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  t( (pIn3->flags 
1eb90 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29  & MEM_Zero)==0 )
1eba0 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20  ;  /* zeroblobs 
1ebb0 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65 64  already expanded
1ebc0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
1ebd0 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1ebe0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1ebf0 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20  n3->n, pIn3->z, 
1ec00 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20  pIdxKey);.  }.  
1ec10 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74  pIdxKey->default
1ec20 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  _rc = 0;.  if( p
1ec30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
1ec40 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20  oConflict ){.   
1ec50 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e   /* For the OP_N
1ec60 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65  oConflict opcode
1ec70 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  , take the jump 
1ec80 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20  if any of the.  
1ec90 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64    ** input field
1eca0 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63  s are NULL, sinc
1ecb0 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61  e any key with a
1ecc0 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20   NULL will not. 
1ecd0 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a     ** conflict *
1ece0 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  /.    for(ii=0; 
1ecf0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
1ed00 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 2e  +){.      if( r.
1ed10 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
1ed20 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1ed30 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1ed40 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e 63  2 - 1; VdbeBranc
1ed50 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
1ed60 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ed70 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
1ed80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ed90 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1eda0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64  pC->pCursor, pId
1edb0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
1edc0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
1edd0 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  .i==0 ){.    sql
1ede0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
1edf0 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28  Free);.  }.  if(
1ee00 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1ee10 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
1ee20 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
1ee30 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61  t = res;.  alrea
1ee40 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d  dyExists = (res=
1ee50 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  =0);.  pC->nullR
1ee60 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78  ow = 1-alreadyEx
1ee70 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  ists;.  pC->defe
1ee80 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1ee90 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1eea0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1eeb0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1eec0 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1eed0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
1eee0 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
1eef0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
1ef00 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
1ef10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1ef20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
1ef30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1ef40 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30  alreadyExists==0
1ef50 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61 6c  ,2);.    if( !al
1ef60 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1ef70 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1ef80 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1ef90 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
1efa0 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
1efb0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1efc0 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
1efd0 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
1efe0 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
1eff0 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
1f000 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
1f010 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
1f020 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67    P3 is an integ
1f030 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31  er rowid.  If P1
1f040 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
1f050 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a  n a record with.
1f060 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  ** rowid P3 then
1f070 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1f080 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  y to P2.  If P1 
1f090 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72  does contain a r
1f0a0 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f  ecord.** with ro
1f0b0 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61 76  wid P3 then leav
1f0c0 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
1f0d0 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
1f0e0 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a  cord and fall.**
1f0f0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1f100 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1f110 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
1f120 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
1f130 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
1f140 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
1f150 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
1f160 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
1f170 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
1f180 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1f190 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1f1a0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
1f1b0 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
1f1c0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
1f1d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
1f1e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1f1f0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1f200 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
1f210 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
1f220 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1f230 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
1f240 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1f250 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
1f260 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1f270 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1f280 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f290 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f2a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1f2b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1f2c0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1f2d0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1f2e0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
1f2f0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1f300 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
1f310 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d  sr!=0 );.  res =
1f320 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e   0;.  iKey = pIn
1f330 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73  3->u.i;.  rc = s
1f340 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1f350 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1f360 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
1f370 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74 52 6f  s);.  pC->lastRo
1f380 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
1f390 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1f3a0 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  lid = res==0 ?1:
1f3b0 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0;.  pC->nullRow
1f3c0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1f3d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1f3e0 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
1f3f0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f400 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
1f410 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
1f420 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
1f430 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1f440 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1f450 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1f460 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 70 43 2d  ==0 );.  }.  pC-
1f470 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
1f480 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  s;.  break;.}../
1f490 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1f4a0 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
1f4b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
1f4c0 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ]=cursor[P1].ctr
1f4d0 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68  ++.**.** Find th
1f4e0 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  e next available
1f4f0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1f500 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
1f510 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71  ** Write the seq
1f520 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74  uence number int
1f530 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1f540 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e  * The sequence n
1f550 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72  umber on the cur
1f560 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  sor is increment
1f570 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a  ed after this.**
1f580 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a   instruction.  .
1f590 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1f5a0 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
1f5b0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1f5c0 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
1f5d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f5e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f5f0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1f600 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f610 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
1f620 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
1f630 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
1f640 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
1f650 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
1f660 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
1f670 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
1f680 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
1f690 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
1f6a0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1f6b0 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
1f6c0 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
1f6d0 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
1f6e0 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
1f6f0 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
1f700 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
1f710 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
1f720 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
1f730 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
1f740 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
1f750 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
1f760 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
1f770 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
1f780 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
1f790 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
1f7a0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
1f7b0 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
1f7c0 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
1f7d0 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
1f7e0 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
1f7f0 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1f800 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
1f810 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
1f820 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
1f830 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
1f840 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
1f850 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
1f860 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
1f870 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
1f880 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
1f890 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1f8a0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
1f8b0 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
1f8c0 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1f8d0 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
1f8e0 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
1f8f0 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
1f900 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
1f910 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
1f920 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
1f930 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1f940 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1f950 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f970 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
1f980 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f990 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
1f9a0 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
1f9b0 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
1f9c0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f9e0 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
1f9f0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
1fa00 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fa20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
1fa30 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1fa40 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
1fa50 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
1fa60 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1fa70 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
1fa80 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
1fa90 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
1faa0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
1fab0 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
1fac0 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
1fad0 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
1fae0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1faf0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1fb00 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1fb10 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1fb20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1fb30 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1fb40 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75  f( NEVER(pC->pCu
1fb50 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20  rsor==0) ){.    
1fb60 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
1fb70 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
1fb80 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
1fb90 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
1fba0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
1fbb0 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
1fbc0 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
1fbd0 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
1fbe0 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
1fbf0 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
1fc00 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
1fc10 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
1fc20 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
1fc30 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
1fc40 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
1fc50 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
1fc60 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
1fc70 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
1fc80 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1fc90 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
1fca0 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
1fcb0 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
1fcc0 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
1fcd0 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
1fce0 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
1fcf0 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
1fd00 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
1fd10 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1fd20 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
1fd30 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
1fd40 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
1fd50 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
1fd60 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
1fd70 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
1fd80 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
1fd90 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
1fda0 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
1fdb0 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
1fdc0 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
1fdd0 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
1fde0 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
1fdf0 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
1fe00 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
1fe10 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1fe20 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1fe30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
1fe40 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
1fe50 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1fe60 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
1fe70 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
1fe80 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
1fe90 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
1fea0 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
1feb0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
1fec0 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
1fed0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1fee0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1fef0 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
1ff00 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
1ff10 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
1ff20 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
1ff30 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
1ff40 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
1ff50 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
1ff60 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1ff70 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
1ff80 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
1ff90 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
1ffa0 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
1ffb0 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
1ffc0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1ffd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ffe0 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
1fff0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
20000 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
20010 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
20020 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20030 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
20040 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
20050 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
20060 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
20070 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
20080 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
20090 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
200a0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
200b0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
200c0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
200d0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
200e0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
200f0 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  v);.        asse
20100 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
20110 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
20120 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
20130 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
20140 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
20150 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
20160 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
20170 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
20180 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20190 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
201a0 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
201b0 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
201c0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
201d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
201e0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
201f0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
20200 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
20210 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
20220 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
20230 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
20240 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
20250 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
20260 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
20270 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
20280 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
20290 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
202a0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
202b0 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
202c0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
202d0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
202e0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
202f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
20300 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
20310 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
20320 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
20330 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
20340 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
20350 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
20360 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
20370 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
20380 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
20390 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
203a0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
203b0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
203c0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
203d0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
203e0 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
203f0 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
20400 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
20410 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
20420 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
20430 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
20440 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
20450 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
20460 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
20470 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
20480 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
20490 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
204a0 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
204b0 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
204c0 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
204d0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
204e0 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
204f0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
20500 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
20510 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
20520 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20530 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20540 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
20550 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
20560 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
20570 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
20580 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
20590 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
205a0 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
205b0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
205c0 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
205d0 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
205e0 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
205f0 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
20600 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
20610 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
20620 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
20630 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
20640 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
20650 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
20660 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
20670 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
20680 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
20690 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
206a0 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
206b0 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
206c0 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
206d0 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
206e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
206f0 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
20700 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
20710 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
20720 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20740 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
20750 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
20760 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65  .      /* on the
20770 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20   first attempt, 
20780 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f  simply do one mo
20790 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73  re than previous
207a0 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c 61   */.      v = la
207b0 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76  stRowid;.      v
207c0 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
207d0 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f  1); /* ensure do
207e0 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76  esn't go negativ
207f0 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20  e */.      v++; 
20800 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65  /* ensure non-ze
20810 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  ro */.      cnt 
20820 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  = 0;.      while
20830 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  (   ((rc = sqlit
20840 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
20850 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
20860 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
208a0 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
208b0 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
208c0 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
208d0 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
208e0 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20  nt<100)){.      
208f0 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d    /* collision -
20900 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e   try another ran
20910 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20  dom rowid */.   
20920 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
20930 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
20940 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
20950 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20  if( cnt<5 ){.   
20960 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73         /* try "s
20970 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77  mall" random row
20980 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74  ids for the init
20990 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a  ial attempts */.
209a0 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 30            v &= 0
209b0 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20  xffffff;.       
209c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
209d0 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
209e0 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
209f0 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
20a00 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  tive */.        
20a10 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f  }.        v++; /
20a20 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72  * ensure non-zer
20a30 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  o */.      }.   
20a40 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
20a50 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
20a60 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
20a70 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
20a80 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
20a90 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
20aa0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
20ab0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
20ac0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
20ad0 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
20ae0 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
20af0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
20b00 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
20b10 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
20b20 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
20b30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
20b40 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
20b50 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
20b60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20b70 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
20b80 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
20b90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
20ba0 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
20bb0 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
20bc0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
20bd0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
20be0 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
20bf0 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
20c00 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
20c10 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
20c20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
20c30 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
20c40 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
20c50 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
20c60 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
20c70 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
20c80 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
20c90 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
20ca0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
20cb0 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
20cc0 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
20cd0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
20ce0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
20cf0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
20d00 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
20d10 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
20d20 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
20d30 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
20d40 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
20d50 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
20d60 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
20d70 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
20d80 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
20d90 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
20da0 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
20db0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
20dc0 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
20dd0 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
20de0 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
20df0 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
20e00 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
20e10 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
20e20 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
20e30 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
20e40 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
20e50 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73  tExists) was a s
20e60 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69  uccess, then thi
20e70 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
20e80 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
20e90 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
20ea0 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
20eb0 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
20ec0 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
20ed0 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
20ee0 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
20ef0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
20f00 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
20f10 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
20f20 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
20f30 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
20f40 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
20f50 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
20f60 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
20f70 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
20f80 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
20f90 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
20fa0 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
20fb0 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
20fc0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
20fd0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
20fe0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
20ff0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
21000 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
21010 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
21020 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
21030 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
21040 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
21050 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
21060 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
21070 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
21080 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
21090 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
210a0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
210b0 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
210c0 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
210d0 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
210e0 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61  ing the table-na
210f0 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65  me, or.** may be
21100 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
21110 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
21120 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a  he update-hook .
21130 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ** (sqlite3.xUpd
21140 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
21150 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e  invoked followin
21160 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
21170 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
21180 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
21190 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
211a0 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
211b0 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
211c0 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
211d0 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
211e0 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
211f0 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
21200 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
21210 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
21220 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
21230 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
21240 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
21250 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
21260 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
21270 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
21280 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
21290 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
212a0 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
212b0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
212c0 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
212d0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
212e0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
212f0 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
21300 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
21310 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
21320 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
21330 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
21340 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
21350 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
21360 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
21370 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
21380 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
21390 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
213a0 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
213b0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
213c0 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
213d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
213e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
213f0 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
21400 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
21410 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
21420 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
21430 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
21440 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
21450 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
21460 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
21470 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
21480 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
21490 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
214a0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
214b0 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
214c0 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
214d0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
214e0 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
214f0 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
21500 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
21510 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
21520 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
21530 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
21540 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21550 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
21560 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
21570 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
21580 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
21590 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
215a0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
215b0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
215c0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
215d0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
215e0 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
215f0 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
21600 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
21610 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
21620 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
21630 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
21640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
21650 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
21660 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
21670 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
21680 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
21690 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
216a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
216b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
216c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
216d0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
216e0 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
216f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21700 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21710 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21720 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
21730 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
21740 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
21750 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
21760 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21770 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
21780 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
21790 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
217a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
217b0 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
217c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
217d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
217e0 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
217f0 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
21800 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
21810 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
21820 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21830 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b  3, pKey);.    iK
21840 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
21850 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21860 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
21870 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
21880 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70  ;.    iKey = pOp
21890 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
218a0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
218b0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
218c0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
218d0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
218e0 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
218f0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
21900 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
21910 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
21920 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
21930 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
21940 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
21950 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
21960 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
21970 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
21980 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
21990 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
219a0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
219b0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
219c0 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
219d0 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
219e0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
219f0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
21a00 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
21a10 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
21a20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
21a30 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
21a40 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
21a50 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
21a60 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
21a80 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
21a90 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ab0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
21ac0 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
21ad0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
21ae0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
21af0 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65  id = 0;.  pC->de
21b00 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
21b10 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
21b20 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
21b30 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
21b40 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
21b50 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
21b60 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
21b70 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
21b80 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
21b90 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
21ba0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
21bb0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
21bc0 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
21bd0 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
21be0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
21bf0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
21c00 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
21c10 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
21c20 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
21c30 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
21c40 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
21c50 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
21c60 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
21c70 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
21c80 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
21c90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21ca0 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
21cb0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
21cc0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
21cd0 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
21ce0 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
21cf0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
21d00 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72  g..**.** The cur
21d10 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
21d20 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74   pointing at eit
21d30 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
21d40 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
21d50 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
21d60 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
21d70 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
21d80 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
21d90 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
21da0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
21db0 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
21dc0 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20  p.  Hence it is 
21dd0 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20  OK to delete.** 
21de0 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
21df0 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f  thin an Next loo
21e00 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  p..**.** If the 
21e10 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
21e20 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74  lag of P2 is set
21e30 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
21e40 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
21e50 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
21e60 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
21e70 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
21e80 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
21e90 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
21ea0 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
21eb0 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
21ec0 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
21ed0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
21ee0 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65  n it is the name
21ef0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
21f00 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e  at P1 is.** poin
21f10 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70  ting to.  The up
21f20 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62  date hook will b
21f30 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74  e invoked, if it
21f40 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50   exists..** If P
21f50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
21f60 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  en the P1 cursor
21f70 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
21f80 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73  positioned.** us
21f90 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
21fa0 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
21fb0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
21fc0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
21fd0 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a  : {.  i64 iKey;.
21fe0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21ff0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
22000 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22010 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22020 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22030 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22040 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22050 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
22060 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
22070 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
22080 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
22090 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 69  udotables */.  i
220a0 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
220b0 77 69 64 3b 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  wid;      /* Onl
220c0 79 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 75  y used for the u
220d0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a 20  pdate hook */.. 
220e0 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74   /* The OP_Delet
220f0 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20  e opcode always 
22100 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f  follows an OP_No
22110 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61  tExists or OP_La
22120 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f  st or.  ** OP_Co
22130 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65  lumn on the same
22140 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61   table without a
22150 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f  ny intervening o
22160 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20  perations that. 
22170 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f   ** might move o
22180 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  r invalidate the
22190 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
221a0 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77  cursor pC is alw
221b0 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a  ays pointing.  *
221c0 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20  * to the row to 
221d0 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  be deleted and t
221e0 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  he sqlite3VdbeCu
221f0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65  rsorMoveto() ope
22200 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f  ration.  ** belo
22210 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f  w is always a no
22220 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66  -op and cannot f
22230 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75  ail.  We will ru
22240 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f  n it anyhow, tho
22250 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61  ugh,.  ** to gua
22260 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75 72  rd against futur
22270 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
22280 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
22290 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28  .  **/.  assert(
222a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
222b0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
222c0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
222d0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
222e0 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
222f0 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
22300 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22310 6f 72 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  or;..  rc = sqli
22320 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
22330 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  C->pCursor);.  p
22340 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22350 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
22360 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
22370 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
22380 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
22390 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
223a0 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  & db->xUpdateCal
223b0 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
223c0 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  .z && pC->isTabl
223d0 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e ){.    db->xUp
223e0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
223f0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c  >pUpdateArg, SQL
22400 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20  ITE_DELETE,.    
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22420 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e      db->aDb[pC->
22430 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d  iDb].zName, pOp-
22440 3e 70 34 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20 20  >p4.z, iKey);.  
22450 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
22460 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66  b>=0 );.  }.  if
22470 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
22480 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
22490 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65  nChange++;.  bre
224a0 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ak;.}./* Opcode:
224b0 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20   ResetCount * * 
224c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
224d0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61  value of the cha
224e0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nge counter is c
224f0 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74  opied to the dat
22500 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
22510 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28  change counter (
22520 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73  returned by subs
22530 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
22540 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
22550 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20  ))..** Then the 
22560 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
22570 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65  nge counter rese
22580 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73  ts to 0..** This
22590 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
225a0 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f  ger programs..*/
225b0 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f  .case OP_ResetCo
225c0 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  unt: {.  sqlite3
225d0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
225e0 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
225f0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
22600 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22610 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43   Opcode: SorterC
22620 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
22630 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
22640 20 69 66 20 6b 65 79 28 50 31 29 21 3d 72 74 72   if key(P1)!=rtr
22650 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
22660 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
22670 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
22680 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
22690 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
226a0 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 74  efix of the.** t
226b0 68 65 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  he record blob i
226c0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
226d0 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
226e0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
226f0 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
22700 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
22710 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
22720 20 66 69 6e 61 6c 20 50 34 20 66 69 65 6c 64 73   final P4 fields
22730 20 6f 66 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20   of both.** the 
22740 50 33 20 61 6e 64 20 73 6f 72 74 65 72 20 72 65  P3 and sorter re
22750 63 6f 72 64 20 61 72 65 20 69 67 6e 6f 72 65 64  cord are ignored
22760 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
22770 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
22780 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
22790 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
227a0 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
227b0 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
227c0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
227d0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
227e0 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
227f0 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
22800 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
22810 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
22820 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
22830 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
22840 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
22850 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
22860 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
22870 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
22880 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
22890 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
228a0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
228b0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
228c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
228d0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 49  nt res;.  int nI
228e0 67 6e 6f 72 65 3b 0a 0a 20 20 70 43 20 3d 20 70  gnore;..  pC = p
228f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22900 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
22910 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
22920 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
22930 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
22940 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
22950 70 2d 3e 70 33 5d 3b 0a 20 20 6e 49 67 6e 6f 72  p->p3];.  nIgnor
22960 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  e = pOp->p4.i;. 
22970 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22980 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70  eSorterCompare(p
22990 43 2c 20 70 49 6e 33 2c 20 6e 49 67 6e 6f 72 65  C, pIn3, nIgnore
229a0 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42  , &res);.  VdbeB
229b0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
229c0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
229d0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
229e0 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
229f0 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
22a00 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
22a10 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
22a20 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
22a30 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
22a40 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
22a50 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
22a60 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
22a70 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  r cursor P1..*/.
22a80 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
22a90 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
22aa0 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
22ab0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
22ac0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22ad0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22ae0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
22af0 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
22b00 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
22b10 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
22b20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22b30 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
22b40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
22b50 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
22b60 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
22b70 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
22b80 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
22b90 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
22ba0 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
22bb0 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
22bc0 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
22bd0 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
22be0 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
22bf0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
22c00 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
22c10 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
22c20 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
22c30 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
22c40 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
22c50 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
22c60 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
22c70 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
22c80 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
22c90 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
22ca0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
22cb0 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
22cc0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
22cd0 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  =key.**.** Write
22ce0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22cf0 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
22d00 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
22d10 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
22d20 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
22d30 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
22d40 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
22d50 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
22d60 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
22d70 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
22d80 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
22d90 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
22da0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
22db0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
22dc0 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
22dd0 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
22de0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
22df0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
22e00 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
22e10 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
22e20 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
22e30 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
22e40 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
22e50 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
22e60 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
22e70 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
22e80 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
22e90 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
22ea0 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  t);..  /* Note t
22eb0 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
22ec0 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
22ed0 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
22ee0 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
22ef0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
22f00 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22f10 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22f20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22f30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22f40 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
22f50 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
22f60 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
22f70 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
22f80 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
22f90 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22fa0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 || pOp->opco
22fb0 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
22fc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22fd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22fe0 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
22ff0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
23000 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
23010 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23020 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
23030 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
23040 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
23050 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
23060 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
23070 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  ) );..  /* The O
23080 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f  P_RowKey and OP_
23090 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
230a0 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
230b0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
230c0 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  ** OP_Rewind/Op_
230d0 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
230e0 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
230f0 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
23100 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a   invalidate.  **
23110 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
23120 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nce the followin
23130 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  g sqlite3VdbeCur
23140 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
23150 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   is always.  ** 
23160 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20  a no-op and can 
23170 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74  never fail.  But
23180 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20   we leave it in 
23190 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74  place as a safet
231a0 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  y..  */.  assert
231b0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
231c0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
231d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
231e0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
231f0 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
23200 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
23210 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23220 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ror;..  if( pC->
23230 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
23240 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
23250 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56  sTable );.    VV
23260 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
23270 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
23280 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20  (pCrsr, &n64);. 
23290 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
232a0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
232b0 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
232c0 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
232d0 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
232e0 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61     if( n64>db->a
232f0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
23300 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
23310 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
23320 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20  ;.    }.    n = 
23330 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73  (u32)n64;.  }els
23340 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  e{.    VVA_ONLY(
23350 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
23360 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
23370 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72  , &n);.    asser
23380 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
23390 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69   );    /* DataSi
233a0 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
233b0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75   */.    if( n>(u
233c0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
233d0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
233e0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
233f0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
23400 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
23410 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
23420 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20  t, n, 0) ){.    
23430 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
23440 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a  .  pOut->n = n;.
23450 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
23460 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pOut, MEM_Blob)
23470 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  ;.  if( pC->isTa
23480 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  ble==0 ){.    rc
23490 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
234a0 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
234b0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
234c0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
234d0 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
234e0 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
234f0 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
23500 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
23510 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
23520 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
23530 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
23540 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
23550 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52  BSIZE(pOut);.  R
23560 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
23570 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
23580 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23590 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
235a0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
235b0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
235c0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
235d0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
235e0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
235f0 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
23600 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
23610 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
23620 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
23630 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
23640 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
23650 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
23660 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
23670 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
23680 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
23690 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
236a0 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
236b0 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
236c0 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
236d0 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
236e0 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
236f0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
23700 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
23710 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
23720 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ease */.  VdbeCu
23730 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
23740 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
23750 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
23760 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
23770 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
23780 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23790 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
237a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
237b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
237c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
237d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
237e0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
237f0 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75  Reg==0 || pC->nu
23800 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
23810 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
23820 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
23830 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
23840 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
23850 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23860 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
23870 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
23880 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23890 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
238a0 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
238b0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b  ->pVtabCursor ){
238c0 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d  .    pVtab = pC-
238d0 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
238e0 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65  tab;.    pModule
238f0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
23900 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
23910 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29  Module->xRowid )
23920 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
23930 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70  le->xRowid(pC->p
23940 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b  VtabCursor, &v);
23950 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
23960 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
23970 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f  pVtab);.#endif /
23980 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
23990 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20  RTUALTABLE */.  
239a0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
239b0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
239c0 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
239d0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
239e0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
239f0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
23a00 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
23a10 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77  .    if( pC->row
23a20 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20  idIsValid ){.   
23a30 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52     v = pC->lastR
23a40 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  owid;.    }else{
23a50 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
23a60 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
23a70 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
23a80 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
23a90 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
23aa0 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62    /* Always so b
23ab0 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
23ac0 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a  Moveto() above *
23ad0 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  /.    }.  }.  pO
23ae0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
23af0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23b00 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a  de: NullRow P1 *
23b10 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76   * * *.**.** Mov
23b20 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  e the cursor P1 
23b30 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20  to a null row.  
23b40 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  Any OP_Column op
23b50 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74  erations.** that
23b60 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
23b70 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68   cursor is on th
23b80 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20  e null row will 
23b90 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20  always.** write 
23ba0 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  a NULL..*/.case 
23bb0 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20  OP_NullRow: {.  
23bc0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23bd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23be0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23bf0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23c00 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23c10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23c20 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
23c30 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
23c40 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
23c50 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  d = 0;.  pC->cac
23c60 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
23c70 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43  _STALE;.  if( pC
23c80 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  ->pCursor ){.   
23c90 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
23ca0 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  arCursor(pC->pCu
23cb0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
23cc0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23cd0 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Last P1 P2 * *
23ce0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
23cf0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
23d00 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
23d10 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
23d20 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
23d30 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61   refer to the la
23d40 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
23d50 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
23d60 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
23d70 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23d80 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
23d90 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
23da0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
23db0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
23dc0 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
23dd0 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
23de0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
23df0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
23e00 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
23e10 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
23e20 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
23e30 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
23e40 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
23e50 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
23e60 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
23e70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23e80 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23e90 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
23ea0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23eb0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
23ec0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
23ed0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72  pC->pCursor;.  r
23ee0 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
23ef0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
23f00 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23f10 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
23f20 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
23f30 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
23f40 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23f50 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77  o = 0;.  pC->row
23f60 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
23f70 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
23f80 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
23f90 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
23fa0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
23fb0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
23fc0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20  ;.    if( res ) 
23fd0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
23fe0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23ff0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  .../* Opcode: So
24000 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
24010 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
24020 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
24030 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
24040 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
24050 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
24060 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
24070 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
24080 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
24090 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
240a0 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
240b0 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
240c0 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
240d0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
240e0 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
240f0 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
24100 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
24110 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
24120 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
24130 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
24140 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
24150 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
24160 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
24170 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
24180 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
24190 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
241a0 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
241b0 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
241c0 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
241d0 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
241e0 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
241f0 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
24200 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
24210 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  se OP_SorterSort
24220 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
24230 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
24240 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
24250 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
24260 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
24270 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
24280 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
24290 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
242a0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
242b0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
242c0 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  RT]++;.  /* Fall
242d0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
242e0 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20  _Rewind */.}./* 
242f0 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50  Opcode: Rewind P
24300 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
24310 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
24320 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
24330 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
24340 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
24350 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
24360 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  o the first entr
24370 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
24380 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
24390 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
243a0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
243b0 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
243c0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
243d0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
243e0 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
243f0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
24400 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
24410 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
24420 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
24430 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
24440 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
24450 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
24460 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
24470 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
24480 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
24490 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
244a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
244b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
244c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
244d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
244e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
244f0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
24500 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
24510 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
24520 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
24530 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   1;.  if( isSort
24540 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
24550 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
24560 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70  rterRewind(db, p
24570 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
24580 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  e{.    pCrsr = p
24590 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  C->pCursor;.    
245a0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
245b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
245c0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
245d0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
245e0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
245f0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
24600 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24610 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
24620 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
24630 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  0;.  }.  pC->nul
24640 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
24650 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24660 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
24670 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42  ->nOp );.  VdbeB
24680 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
24690 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
246a0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
246b0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
246c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
246d0 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50  de: Next P1 P2 P
246e0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64  3 P4 P5.**.** Ad
246f0 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
24700 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
24710 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
24720 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
24730 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
24740 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
24750 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
24760 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
24770 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
24780 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
24790 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
247a0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
247b0 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
247c0 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
247d0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
247e0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
247f0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
24800 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
24810 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
24820 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20  table.  P1 must 
24830 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65  have.** been ope
24840 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ned prior to thi
24850 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20  s opcode or the 
24860 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67  program will seg
24870 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fault..**.** The
24880 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
24890 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
248a0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
248b0 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
248c0 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
248d0 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
248e0 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
248f0 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
24900 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
24910 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
24920 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
24930 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
24940 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
24950 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
24960 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
24970 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
24980 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
24990 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
249a0 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
249b0 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a  e3BtreeNext()..*
249c0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
249d0 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
249e0 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
249f0 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
24a00 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
24a10 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
24a20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
24a30 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
24a40 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20  See also: Prev, 
24a50 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a  NextIfOpen.*/./*
24a60 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f   Opcode: NextIfO
24a70 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
24a80 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
24a90 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
24aa0 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63  like OP_Next exc
24ab0 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
24ac0 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
24ad0 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
24ae0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f  a no-op..*/./* O
24af0 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
24b00 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
24b10 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
24b20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
24b30 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
24b40 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
24b50 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
24b60 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
24b70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
24b80 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
24b90 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
24ba0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
24bb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
24bc0 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
24bd0 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
24be0 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
24bf0 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
24c00 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
24c10 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
24c20 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
24c30 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
24c40 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
24c50 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74   If P1 is.** not
24c60 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62   open then the b
24c70 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
24c80 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ined..**.** The 
24c90 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
24ca0 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
24cb0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
24cc0 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
24cd0 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
24ce0 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
24cf0 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
24d00 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
24d10 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
24d20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
24d30 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
24d40 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
24d50 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
24d60 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
24d70 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
24d80 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
24d90 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
24da0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
24db0 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
24dc0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29  3BtreePrevious()
24dd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
24de0 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
24df0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
24e00 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
24e10 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
24e20 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
24e30 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
24e40 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
24e50 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49  /* Opcode: PrevI
24e60 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
24e70 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
24e80 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
24e90 74 20 6c 69 6b 65 20 4f 50 5f 50 72 65 76 20 65  t like OP_Prev e
24ea0 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
24eb0 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
24ec0 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
24ed0 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
24ee0 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  se OP_SorterNext
24ef0 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  : {  /* jump */.
24f00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24f10 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
24f20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24f30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24f40 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
24f50 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
24f60 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
24f70 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
24f80 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20  , &res);.  goto 
24f90 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20  next_tail;.case 
24fa0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20  OP_PrevIfOpen:  
24fb0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
24fc0 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a  e OP_NextIfOpen:
24fd0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
24fe0 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
24ff0 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61  p->p1]==0 ) brea
25000 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
25010 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ough */.case OP_
25020 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
25030 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
25040 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20  P_Next:         
25050 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
25060 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25070 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25080 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
25090 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61  rt( pOp->p5<Arra
250a0 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
250b0 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
250c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
250d0 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b    res = pOp->p3;
250e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
250f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25100 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25110 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
25120 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a   pC->pCursor );.
25130 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30    assert( res==0
25140 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70   || (res==1 && p
25150 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29  C->isTable==0) )
25160 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65  ;.  testcase( re
25170 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  s==1 );.  assert
25180 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
25190 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70  P_Next || pOp->p
251a0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
251b0 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
251c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
251d0 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
251e0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
251f0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
25200 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73  Previous );.  as
25210 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25220 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
25230 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
25240 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
25250 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65  eeNext );.  asse
25260 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
25270 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c  =OP_PrevIfOpen |
25280 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
25290 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
252a0 50 72 65 76 69 6f 75 73 29 3b 0a 20 20 72 63 20  Previous);.  rc 
252b0 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  = pOp->p4.xAdvan
252c0 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ce(pC->pCursor, 
252d0 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  &res);.next_tail
252e0 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
252f0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
25300 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
25310 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a  aken(res==0,2);.
25320 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
25330 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
25340 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f  = 0;.    pc = pO
25350 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70  p->p2 - 1;.    p
25360 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
25370 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
25380 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
25390 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
253a0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  nt++;.#endif.  }
253b0 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  else{.    pC->nu
253c0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20  llRow = 1;.  }. 
253d0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
253e0 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20 63 68  d = 0;.  goto ch
253f0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
25400 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
25410 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
25420 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f   P3 * P5.** Syno
25430 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
25440 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
25450 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
25460 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
25470 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
25480 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
25490 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
254a0 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
254b0 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
254c0 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
254d0 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
254e0 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
254f0 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
25500 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
25510 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
25520 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
25530 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
25540 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
25550 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
25560 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
25570 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
25580 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
25590 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  r is.** incremen
255a0 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  ted by this inst
255b0 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
255c0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
255d0 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a  bit is clear,.**
255e0 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
255f0 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68   counter is unch
25600 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anged..**.** If 
25610 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
25620 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
25630 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
25640 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  e cursor must ha
25650 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20  ve.** just done 
25660 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73 70  a seek to the sp
25670 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65 77  ot where the new
25680 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65 20   entry is to be 
25690 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69  inserted..** Thi
256a0 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64 6f  s flag avoids do
256b0 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65 65  ing an extra see
256c0 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  k..**.** This in
256d0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
256e0 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
256f0 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
25700 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
25710 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
25720 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73  P_Insert..*/.cas
25730 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  e OP_SorterInser
25740 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  t:       /* in2 
25750 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
25760 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
25770 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
25780 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
25790 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
257a0 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
257b0 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
257c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
257d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
257e0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
257f0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
25800 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
25810 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
25820 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
25830 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
25840 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
25850 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
25860 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
25870 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
25880 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
25890 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
258a0 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f  Cursor;.  if( pO
258b0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
258c0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
258d0 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  nge++;.  assert(
258e0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
258f0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
25900 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  le==0 );.  rc = 
25910 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
25920 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
25930 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28  TE_OK ){.    if(
25940 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
25950 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
25960 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69  te3VdbeSorterWri
25970 74 65 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29  te(db, pC, pIn2)
25980 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
25990 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
259a0 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20  n;.      zKey = 
259b0 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72  pIn2->z;.      r
259c0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
259d0 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b  Insert(pCrsr, zK
259e0 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c  ey, nKey, "", 0,
259f0 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20   0, pOp->p3, .  
25a00 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
25a10 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
25a20 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
25a30 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
25a40 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
25a50 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
25a60 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
25a70 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61   );.      pC->ca
25a80 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
25a90 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20  E_STALE;.    }. 
25aa0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
25ab0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
25ac0 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
25ad0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
25ae0 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  y=r[P2@P3].**.**
25af0 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
25b00 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
25b10 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
25b20 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
25b30 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
25b40 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
25b50 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
25b60 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
25b70 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
25b80 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
25b90 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
25ba0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
25bb0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
25bc0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
25bd0 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
25be0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
25bf0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
25c00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
25c10 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f  >0 && pOp->p2+pO
25c20 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
25c30 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
25c40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25c50 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25c60 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25c70 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25c80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25c90 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
25ca0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
25cb0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
25cc0 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
25cd0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
25ce0 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
25cf0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
25d00 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
25d10 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66  pOp->p3;.  r.def
25d20 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72  ault_rc = 0;.  r
25d30 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
25d40 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53  p->p2];.#ifdef S
25d50 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
25d60 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
25d70 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
25d80 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
25d90 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
25da0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63  ); }.#endif.  rc
25db0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
25dc0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
25dd0 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
25de0 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  res);.  if( rc==
25df0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
25e00 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
25e10 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
25e20 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20  te(pCrsr);.  }. 
25e30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
25e40 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
25e50 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
25e60 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
25e70 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
25e80 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
25e90 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
25ea0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
25eb0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72  ]=rowid.**.** Wr
25ec0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
25ed0 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
25ee0 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
25ef0 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
25f00 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
25f10 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
25f20 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
25f30 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
25f40 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
25f50 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
25f60 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
25f70 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
25f80 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
25f90 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
25fa0 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
25fb0 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
25fc0 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
25fd0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
25fe0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
25ff0 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  e */.  BtCursor 
26000 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75  *pCrsr;.  VdbeCu
26010 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
26020 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74  rowid;..  assert
26030 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
26040 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
26050 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
26060 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
26070 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
26080 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
26090 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
260a0 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
260b0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
260c0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d  MEM_Null;.  rc =
260d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
260e0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
260f0 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20  if( NEVER(rc) ) 
26100 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26110 6f 5f 65 72 72 6f 72 3b 0a 20 20 61 73 73 65 72  o_error;.  asser
26120 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
26130 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
26140 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
26150 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 21 70  e==0 );.  if( !p
26160 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
26170 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a    rowid = 0;  /*
26180 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
26190 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
261a0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
261b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
261c0 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
261d0 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  , pCrsr, &rowid)
261e0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
261f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
26200 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26210 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
26220 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
26230 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d  rowid;.    pOut-
26240 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
26250 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26260 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
26270 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
26280 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
26290 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
262a0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
262b0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
262c0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
262d0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
262e0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
262f0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
26300 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
26310 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
26320 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
26330 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
26340 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
26350 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
26360 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
26370 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
26380 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
26390 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
263a0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
263b0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
263c0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
263d0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
263e0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
263f0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
26400 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
26410 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
26420 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31  Opcode: IdxGT P1
26430 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
26440 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
26450 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
26460 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
26470 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
26480 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
26490 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
264a0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
264b0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
264c0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
264d0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
264e0 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
264f0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
26500 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
26510 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
26520 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
26530 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
26540 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
26550 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
26560 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
26570 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
26580 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
26590 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
265a0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
265b0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
265c0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
265d0 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
265e0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
265f0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
26600 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
26610 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
26620 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
26630 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
26640 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
26650 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
26660 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
26670 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
26680 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
26690 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
266a0 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
266b0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
266c0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
266d0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
266e0 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
266f0 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
26700 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
26710 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
26720 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
26730 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
26740 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
26750 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
26760 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
26770 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
26780 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20  pcode: IdxLE P1 
26790 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
267a0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
267b0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
267c0 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
267d0 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
267e0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
267f0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
26800 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
26810 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
26820 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
26830 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
26840 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
26850 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
26860 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
26870 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
26880 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
26890 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
268a0 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
268b0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
268c0 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
268d0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
268e0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
268f0 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f   then jump.** to
26900 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66   P2. Otherwise f
26910 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
26920 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
26930 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
26940 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20  IdxLE:          
26950 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
26960 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20  OP_IdxGT:       
26970 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
26980 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
26990 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
269a0 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
269b0 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
269c0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
269d0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
269e0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
269f0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
26a00 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
26a10 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
26a20 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
26a30 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
26a40 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
26a50 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
26a60 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
26a70 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
26a80 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28  r!=0);.  assert(
26a90 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26aa0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
26ab0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
26ac0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
26ad0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26ae0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
26af0 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
26b00 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
26b10 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
26b20 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69  6)pOp->p4.i;.  i
26b30 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f  f( pOp->opcode<O
26b40 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61  P_IdxLT ){.    a
26b50 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26b60 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
26b70 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
26b80 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxGT );.    r.d
26b90 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
26ba0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
26bb0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26bc0 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
26bd0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
26be0 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xLT );.    r.def
26bf0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d  ault_rc = 0;.  }
26c00 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
26c10 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
26c20 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
26c30 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
26c40 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
26c50 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
26c60 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
26c70 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
26c80 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e    res = 0;  /* N
26c90 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
26ca0 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
26cb0 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
26cc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
26cd0 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70  eIdxKeyCompare(p
26ce0 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20  C, &r, &res);.  
26cf0 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c  assert( (OP_IdxL
26d00 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26  E&1)==(OP_IdxLT&
26d10 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26  1) && (OP_IdxGE&
26d20 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29  1)==(OP_IdxGT&1)
26d30 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e   );.  if( (pOp->
26d40 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49  opcode&1)==(OP_I
26d50 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61  dxLT&1) ){.    a
26d60 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26d70 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
26d80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
26d90 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxLT );.    res
26da0 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65   = -res;.  }else
26db0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
26dc0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
26dd0 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
26de0 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
26df0 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20      res++;.  }. 
26e00 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
26e10 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28  (res>0,2);.  if(
26e20 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 70 63   res>0 ){.    pc
26e30 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b   = pOp->p2 - 1 ;
26e40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26e50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
26e60 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
26e70 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
26e80 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
26e90 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
26ea0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
26eb0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
26ec0 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
26ed0 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
26ee0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
26ef0 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
26f00 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
26f10 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
26f20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
26f30 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
26f40 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
26f50 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
26f60 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
26f70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
26f80 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
26f90 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
26fa0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
26fb0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
26fc0 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
26fd0 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
26fe0 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
26ff0 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
27000 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
27010 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
27020 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
27030 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
27040 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
27050 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
27060 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
27070 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
27080 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
27090 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
270a0 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
270b0 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
270c0 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
270d0 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
270e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
270f0 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20   If no page .** 
27100 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
27110 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
27120 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
27130 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61  ropped was alrea
27140 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20  dy .** the last 
27150 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
27160 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f  ase) then a zero
27170 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
27180 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66  gister P2..** If
27190 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64   AUTOVACUUM is d
271a0 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a  isabled then a z
271b0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
271c0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
271d0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
271e0 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
271f0 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
27200 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
27210 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
27220 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20  ;.  int iCnt;.  
27230 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69  Vdbe *pVdbe;.  i
27240 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72  nt iDb;..  asser
27250 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
27260 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  0 );.#ifndef SQL
27270 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
27280 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30  TABLE.  iCnt = 0
27290 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
272a0 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
272b0 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70  pVdbe = pVdbe->p
272c0 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
272d0 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
272e0 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
272f0 56 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72 20  Vdbe->bIsReader 
27300 0a 20 20 20 20 20 26 26 20 70 56 64 62 65 2d 3e  .     && pVdbe->
27310 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26  inVtabMethod<2 &
27320 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a  & pVdbe->pc>=0 .
27330 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43 6e      ){.      iCn
27340 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  t++;.    }.  }.#
27350 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62  else.  iCnt = db
27360 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65 6e  ->nVdbeRead;.#en
27370 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  dif.  pOut->flag
27380 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
27390 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20  if( iCnt>1 ){.  
273a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
273b0 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72  CKED;.    p->err
273c0 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62  orAction = OE_Ab
273d0 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ort;.  }else{.  
273e0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
273f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e  .    assert( iCn
27400 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  t==1 );.    asse
27410 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
27420 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
27430 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  )<<iDb))!=0 );. 
27440 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20     iMoved = 0;  
27450 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
27460 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20  Only to silence 
27470 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
27480 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27490 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d  reeDropTable(db-
274a0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70  >aDb[iDb].pBt, p
274b0 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29  Op->p1, &iMoved)
274c0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
274d0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
274e0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
274f0 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ved;.#ifndef SQL
27500 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
27510 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  UUM.    if( rc==
27520 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f  SQLITE_OK && iMo
27530 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
27540 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
27550 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d  oved(db, iDb, iM
27560 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
27570 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f        /* All OP_
27580 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
27590 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  ns occur on the 
275a0 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20  same btree */.  
275b0 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65      assert( rese
275c0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
275d0 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61  0 || resetSchema
275e0 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29  OnFault==iDb+1 )
275f0 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
27600 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62  emaOnFault = iDb
27610 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  +1;.    }.#endif
27620 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
27630 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61  ./* Opcode: Clea
27640 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a  r P1 P2 P3.**.**
27650 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
27660 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
27670 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
27680 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
27690 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61  age.** in the da
276a0 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67  tabase file is g
276b0 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74  iven by P1.  But
276c0 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79  , unlike Destroy
276d0 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f  , do not.** remo
276e0 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  ve the table or 
276f0 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64  index from the d
27700 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
27710 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
27720 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20  ing clear is in 
27730 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
27740 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e  e file if P2==0.
27750 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68    If.** P2==1 th
27760 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
27770 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
27780 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
27790 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
277a0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
277b0 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
277c0 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
277d0 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
277e0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20  **.** If the P3 
277f0 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
27800 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  o, then the tabl
27810 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75  e referred to mu
27820 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b  st be an.** intk
27830 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c  ey table (an SQL
27840 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69   table, not an i
27850 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63  ndex). In this c
27860 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e  ase the row chan
27870 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20  ge .** count is 
27880 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
27890 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
278a0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
278b0 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a  eing cleared. .*
278c0 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74  * If P3 is great
278d0 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
278e0 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  en the value sto
278f0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
27900 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e  P3 is.** also in
27910 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
27920 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
27930 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
27940 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a  ng cleared..**.*
27950 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74  * See also: Dest
27960 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  roy.*/.case OP_C
27970 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43  lear: {.  int nC
27980 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e  hange;. .  nChan
27990 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ge = 0;.  assert
279a0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
279b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
279c0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
279d0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
279e0 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
279f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27a00 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
27a10 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
27a20 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
27a30 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
27a40 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
27a50 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
27a60 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
27a70 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
27a80 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
27a90 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
27aa0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
27ab0 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
27ac0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
27ad0 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
27ae0 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
27af0 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
27b00 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
27b10 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
27b20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
27b30 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
27b40 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
27b50 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
27b60 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
27b70 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
27b80 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
27b90 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
27ba0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
27bb0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
27bc0 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
27bd0 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
27be0 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
27bf0 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
27c00 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
27c10 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
27c20 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
27c30 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
27c40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27c50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27c60 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27c70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27c80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27c90 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
27ca0 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20  >pSorter ){.    
27cb0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
27cc0 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70  rReset(db, pC->p
27cd0 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
27ce0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
27cf0 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
27d00 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
27d10 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
27d20 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  OfCursor(pC->pCu
27d30 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
27d40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27d50 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
27d60 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
27d70 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
27d80 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
27d90 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
27da0 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
27db0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
27dc0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
27dd0 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
27de0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
27df0 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
27e00 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
27e10 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
27e20 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
27e30 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
27e40 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
27e50 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
27e60 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
27e70 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
27e80 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
27e90 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
27ea0 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
27eb0 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
27ec0 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
27ed0 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
27ee0 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
27ef0 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
27f00 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
27f10 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
27f20 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
27f30 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
27f40 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
27f50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
27f60 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
27f70 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
27f80 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
27f90 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
27fa0 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
27fb0 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
27fc0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
27fd0 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
27fe0 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
27ff0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
28000 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
28010 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
28020 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
28030 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
28040 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
28050 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
28060 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
28070 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
28080 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
28090 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
280a0 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
280b0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
280c0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
280d0 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
280e0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
280f0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
28100 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67  pgno;.  int flag
28110 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  s;.  Db *pDb;.. 
28120 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
28130 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28140 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
28150 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
28160 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
28170 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
28180 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
28190 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
281a0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
281b0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
281c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
281d0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
281e0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
281f0 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  ==OP_CreateTable
28200 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73   ){.    /* flags
28210 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
28220 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20   */.    flags = 
28230 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
28240 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
28250 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59   = BTREE_BLOBKEY
28260 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
28270 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
28280 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
28290 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20  pgno, flags);.  
282a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
282b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
282c0 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
282d0 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
282e0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
282f0 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
28300 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
28310 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
28320 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
28330 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
28340 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
28350 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
28360 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
28370 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
28380 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
28390 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
283a0 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
283b0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
283c0 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
283d0 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
283e0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
283f0 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
28400 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
28410 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
28420 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
28430 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
28440 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
28450 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
28460 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
28470 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
28480 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
28490 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
284a0 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
284b0 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
284c0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
284d0 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
284e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
284f0 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
28500 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
28510 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
28520 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
28530 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
28540 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
28550 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
28560 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
28570 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
28580 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
28590 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
285a0 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
285b0 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
285c0 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
285d0 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
285e0 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
285f0 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
28600 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
28610 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  );.    initData.
28620 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
28630 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
28640 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  >p1;.    initDat
28650 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
28660 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53  >zErrMsg;.    zS
28670 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
28680 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
28690 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
286a0 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20  tpage, sql FROM 
286b0 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73  '%q'.%s WHERE %s
286c0 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22   ORDER BY rowid"
286d0 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
286e0 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
286f0 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
28700 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
28710 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
28720 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
28730 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
28740 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
28750 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
28760 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
28770 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
28780 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
28790 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
287a0 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
287b0 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
287c0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
287d0 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
287e0 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
287f0 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
28800 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28810 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
28820 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
28830 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
28840 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
28850 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
28860 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
28870 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65  rc ) sqlite3Rese
28880 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
28890 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69  nection(db);.  i
288a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
288b0 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
288c0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
288d0 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
288e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
288f0 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
28900 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
28910 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
28920 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
28930 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
28940 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
28950 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
28960 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
28970 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
28980 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
28990 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
289a0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
289b0 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
289c0 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
289d0 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
289e0 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
289f0 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
28a00 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
28a10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28a20 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
28a30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
28a40 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
28a50 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62  b, pOp->p1);.  b
28a60 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
28a70 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
28a80 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
28a90 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
28aa0 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
28ab0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
28ac0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
28ad0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
28ae0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
28af0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
28b00 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
28b10 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
28b20 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
28b30 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
28b40 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
28b50 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
28b60 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
28b70 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
28b80 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
28b90 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
28ba0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
28bb0 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
28bc0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
28bd0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
28be0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
28bf0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
28c00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28c10 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
28c20 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
28c30 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
28c40 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
28c50 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
28c60 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
28c70 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
28c80 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
28c90 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
28ca0 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
28cb0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
28cc0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
28cd0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
28ce0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
28cf0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
28d00 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
28d10 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
28d20 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
28d30 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
28d40 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
28d50 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
28d60 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
28d70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28d80 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
28d90 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
28da0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
28db0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
28dc0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
28dd0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
28de0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
28df0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
28e00 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
28e10 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
28e20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
28e30 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
28e40 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
28e50 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
28e60 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
28e70 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
28e80 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
28e90 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
28ea0 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
28eb0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
28ec0 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
28ed0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
28ee0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
28ef0 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
28f00 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
28f10 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
28f20 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
28f30 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
28f40 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
28f50 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
28f60 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
28f70 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
28f80 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
28f90 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
28fa0 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
28fb0 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
28fc0 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
28fd0 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
28fe0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
28ff0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
29000 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
29010 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
29020 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
29030 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
29040 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
29050 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
29060 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
29070 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
29080 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
29090 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
290a0 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
290b0 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
290c0 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
290d0 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
290e0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
290f0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
29100 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
29110 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
29120 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
29130 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
29140 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
29150 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
29160 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
29170 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
29180 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
29190 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
291a0 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
291b0 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
291c0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
291d0 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
291e0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
291f0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
29200 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
29210 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
29220 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
29230 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
29240 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
29250 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
29260 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
29270 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
29280 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
29290 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
292a0 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
292b0 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
292c0 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
292d0 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
292e0 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
292f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
29300 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
29310 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
29320 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
29330 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
29340 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
29350 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
29360 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
29370 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
29380 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
29390 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
293a0 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
293b0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
293c0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
293d0 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
293e0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
293f0 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  >0 );.  aRoot = 
29400 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
29410 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  aw(db, sizeof(in
29420 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a  t)*(nRoot+1) );.
29430 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
29440 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
29450 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
29460 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
29470 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
29480 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
29490 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
294a0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
294b0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
294c0 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
294d0 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
294e0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
294f0 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
29500 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
29510 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  >p1];.  for(j=0;
29520 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a   j<nRoot; j++){.
29530 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28      aRoot[j] = (
29540 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49  int)sqlite3VdbeI
29550 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d  ntValue(&pIn1[j]
29560 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a  );.  }.  aRoot[j
29570 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  ] = 0;.  assert(
29580 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
29590 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
295a0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
295b0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
295c0 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a  ->p5))!=0 );.  z
295d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
295e0 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
295f0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
29600 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
29610 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
29620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29630 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
29640 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  .i, &nErr);.  sq
29650 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
29660 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d  aRoot);.  pnErr-
29670 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20  >u.i -= nErr;.  
29680 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
29690 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
296a0 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
296b0 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
296c0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
296d0 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
296e0 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
296f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
29700 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
29710 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
29720 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
29730 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
29740 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
29750 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
29760 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
29770 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
29780 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
29790 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
297a0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
297b0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
297c0 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
297d0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
297e0 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d 72  s:  rowset(P1)=r
297f0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72  [P2].**.** Inser
29800 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
29810 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69  lue held by regi
29820 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62  ster P2 into a b
29830 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  oolean index.** 
29840 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
29850 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73   P1..**.** An as
29860 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66  sertion fails if
29870 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P2 is not an in
29880 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
29890 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20  P_RowSetAdd: {  
298a0 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32       /* in1, in2
298b0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
298c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
298d0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
298e0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
298f0 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
29900 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
29910 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
29920 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
29930 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
29940 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
29950 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
29960 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
29970 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
29980 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
29990 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  .  sqlite3RowSet
299a0 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
299b0 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e  RowSet, pIn2->u.
299c0 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
299d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
299e0 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a  tRead P1 P2 P3 *
299f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29a00 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31   r[P3]=rowset(P1
29a10 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  ).**.** Extract 
29a20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
29a30 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20  ue from boolean 
29a40 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74  index P1 and put
29a50 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
29a60 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e  .** register P3.
29a70 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e    Or, if boolean
29a80 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69   index P1 is ini
29a90 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
29aa0 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
29ab0 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
29ac0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
29ad0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
29ae0 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
29af0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
29b00 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
29b10 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
29b20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
29b30 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
29b40 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20  EM_RowSet)==0 . 
29b50 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53    || sqlite3RowS
29b60 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70  etNext(pIn1->u.p
29b70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30  RowSet, &val)==0
29b80 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  .  ){.    /* The
29b90 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69   boolean index i
29ba0 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73  s empty */.    s
29bb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
29bc0 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20  Null(pIn1);.    
29bd0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
29be0 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
29bf0 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d 65  Taken(1,2);.  }e
29c00 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
29c10 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
29c20 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
29c30 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29c40 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
29c50 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
29c60 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
29c70 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d 0a  Taken(0,2);.  }.
29c80 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
29c90 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
29ca0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
29cb0 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
29cc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
29cd0 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
29ce0 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
29cf0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
29d00 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
29d10 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
29d20 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
29d30 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
29d40 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
29d50 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
29d60 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
29d70 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
29d80 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
29d90 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
29da0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
29db0 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
29dc0 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
29dd0 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
29de0 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
29df0 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
29e00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
29e10 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
29e20 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
29e30 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
29e40 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
29e50 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
29e60 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
29e70 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
29e80 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
29e90 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
29ea0 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
29eb0 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
29ec0 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
29ed0 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
29ee0 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
29ef0 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
29f00 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
29f10 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
29f20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
29f30 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
29f40 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
29f50 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
29f60 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
29f70 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
29f80 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
29f90 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
29fa0 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
29fb0 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
29fc0 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
29fd0 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
29fe0 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
29ff0 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
2a000 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
2a010 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
2a020 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
2a030 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
2a040 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
2a050 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
2a060 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
2a070 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
2a080 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
2a090 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
2a0a0 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
2a0b0 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
2a0c0 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
2a0d0 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2a0e0 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
2a0f0 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
2a100 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
2a110 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
2a120 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
2a130 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
2a140 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2a150 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2a160 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
2a170 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
2a180 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
2a190 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2a1a0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
2a1b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
2a1c0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
2a1d0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
2a1e0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
2a1f0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2a200 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
2a210 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
2a220 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
2a230 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
2a240 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
2a250 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
2a260 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
2a270 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
2a280 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2a290 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2a2a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2a2b0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2a2c0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2a2d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2a2e0 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2a2f0 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
2a300 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2a310 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2a320 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
2a330 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
2a340 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
2a350 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
2a360 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
2a370 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65  ->u.pRowSet, iSe
2a380 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
2a390 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2a3a0 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
2a3b0 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
2a3c0 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
2a3d0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
2a3e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2a3f0 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
2a400 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
2a410 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2a420 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
2a430 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
2a440 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2a450 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2a460 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
2a470 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
2a480 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2a490 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
2a4a0 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
2a4b0 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
2a4c0 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
2a4d0 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
2a4e0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
2a4f0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
2a500 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
2a510 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
2a520 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
2a530 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
2a540 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
2a550 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
2a560 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
2a570 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
2a580 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
2a590 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
2a5a0 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
2a5b0 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
2a5c0 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
2a5d0 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
2a5e0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2a5f0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
2a600 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
2a610 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
2a620 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
2a630 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
2a640 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
2a650 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
2a660 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
2a670 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
2a680 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2a690 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
2a6a0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2a6b0 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
2a6c0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2a6d0 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
2a6e0 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
2a6f0 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
2a700 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2a710 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2a720 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2a730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2a740 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2a750 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2a760 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2a770 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2a780 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2a790 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2a7a0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2a7b0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2a7c0 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2a7d0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2a7e0 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2a7f0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2a800 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2a810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2a820 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2a830 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
2a840 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
2a850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2a860 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
2a870 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
2a880 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2a890 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
2a8a0 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
2a8b0 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
2a8c0 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
2a8d0 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
2a8e0 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
2a8f0 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
2a900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2a910 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
2a920 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
2a930 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
2a940 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
2a950 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
2a960 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2a970 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
2a980 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
2a990 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
2a9a0 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
2a9b0 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2a9c0 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
2a9d0 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
2a9e0 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2a9f0 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
2aa00 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
2aa10 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
2aa20 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
2aa30 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
2aa40 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
2aa50 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
2aa60 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
2aa70 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
2aa80 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
2aa90 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
2aaa0 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
2aab0 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
2aac0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2aad0 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
2aae0 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
2aaf0 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2ab00 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
2ab10 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
2ab20 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
2ab30 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
2ab40 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
2ab50 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
2ab60 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
2ab70 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
2ab80 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
2ab90 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
2aba0 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
2abb0 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
2abc0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2abd0 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
2abe0 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
2abf0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
2ac00 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
2ac10 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
2ac20 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
2ac30 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
2ac40 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2ac50 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
2ac60 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2ac70 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
2ac80 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
2ac90 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2aca0 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
2acb0 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
2acc0 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
2acd0 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
2ace0 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
2acf0 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
2ad00 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2ad10 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
2ad20 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ad30 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e  sg, db, "too man
2ad40 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
2ad50 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
2ad60 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2ad70 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
2ad80 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
2ad90 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
2ada0 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
2adb0 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
2adc0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
2add0 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
2ade0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
2adf0 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
2ae00 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
2ae10 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
2ae20 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
2ae30 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
2ae40 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
2ae50 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
2ae60 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
2ae70 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
2ae80 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
2ae90 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
2aea0 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
2aeb0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
2aec0 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
2aed0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
2aee0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
2aef0 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
2af00 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
2af10 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
2af20 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
2af30 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
2af40 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
2af50 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
2af60 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
2af70 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
2af80 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
2af90 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
2afa0 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
2afb0 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
2afc0 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
2afd0 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
2afe0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
2aff0 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
2b000 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52  r;.    nByte = R
2b010 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62  OUND8(sizeof(Vdb
2b020 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20  eFrame)).       
2b030 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20         + nMem * 
2b040 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20  sizeof(Mem).    
2b050 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
2b060 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a  gram->nCsr * siz
2b070 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a  eof(VdbeCursor *
2b080 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2b090 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63  + pProgram->nOnc
2b0a0 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a  e * sizeof(u8);.
2b0b0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
2b0c0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
2b0d0 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
2b0e0 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
2b0f0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
2b100 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
2b110 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2b120 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
2b130 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
2b140 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
2b150 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2b160 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
2b170 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
2b180 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
2b190 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
2b1a0 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
2b1b0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
2b1c0 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a  Frame->pc = pc;.
2b1d0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
2b1e0 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
2b1f0 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
2b200 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
2b210 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
2b220 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
2b230 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
2b240 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
2b250 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
2b260 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2b270 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
2b280 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
2b290 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2b2a0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e  .    pFrame->aOn
2b2b0 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63  ceFlag = p->aOnc
2b2c0 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d  eFlag;.    pFram
2b2d0 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->nOnceFlag = p
2b2e0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20 20  ->nOnceFlag;..  
2b2f0 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
2b300 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
2b310 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2b320 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
2b330 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2b340 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
2b350 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
2b360 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
2b370 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
2b380 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
2b390 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
2b3a0 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
2b3b0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
2b3c0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2b3d0 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
2b3e0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2b3f0 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20  >nChildMem );.  
2b400 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2b410 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2b420 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20  ->nChildCsr );. 
2b430 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70     assert( pc==p
2b440 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
2b450 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
2b460 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
2b470 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
2b480 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
2b490 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
2b4a0 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
2b4b0 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
2b4c0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
2b4d0 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
2b4e0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
2b4f0 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62  em = aMem = &Vdb
2b500 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2b510 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  )[-1];.  p->nMem
2b520 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
2b530 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
2b540 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
2b550 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
2b560 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
2b570 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
2b580 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e  ->nMem+1];.  p->
2b590 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
2b5a0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
2b5b0 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
2b5c0 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46  nOp;.  p->aOnceF
2b5d0 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e  lag = (u8 *)&p->
2b5e0 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72  apCsr[p->nCursor
2b5f0 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ];.  p->nOnceFla
2b600 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  g = pProgram->nO
2b610 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a  nce;.  pc = -1;.
2b620 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63    memset(p->aOnc
2b630 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e  eFlag, 0, p->nOn
2b640 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61  ceFlag);..  brea
2b650 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b660 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
2b670 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
2b680 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
2b690 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
2b6a0 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
2b6b0 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
2b6c0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
2b6d0 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
2b6e0 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
2b6f0 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
2b700 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
2b710 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
2b720 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
2b730 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
2b740 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
2b750 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
2b760 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
2b770 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
2b780 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
2b790 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
2b7a0 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
2b7b0 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
2b7c0 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
2b7d0 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
2b7e0 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
2b7f0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
2b800 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
2b810 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
2b820 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
2b830 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
2b840 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2b850 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2b860 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
2b870 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
2b880 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
2b890 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2b8a0 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
2b8b0 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
2b8c0 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
2b8d0 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2b8e0 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
2b8f0 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
2b900 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
2b910 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
2b920 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
2b930 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
2b940 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
2b950 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b960 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
2b970 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b980 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
2b990 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
2b9a0 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
2b9b0 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72   Synopsis: fkctr
2b9c0 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49  [P1]+=P2.**.** I
2b9d0 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73  ncrement a "cons
2b9e0 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20  traint counter" 
2b9f0 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65  by P2 (P2 may be
2ba00 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73   negative or pos
2ba10 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31  itive)..** If P1
2ba20 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2ba30 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
2ba40 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  raint counter is
2ba50 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a   incremented .**
2ba60 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   (deferred forei
2ba70 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2ba80 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ts). Otherwise, 
2ba90 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  if P1 is zero, t
2baa0 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  he .** statement
2bab0 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2bac0 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61  emented (immedia
2bad0 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2bae0 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a  onstraints)..*/.
2baf0 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65  case OP_FkCounte
2bb00 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66  r: {.  if( db->f
2bb10 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65  lags & SQLITE_De
2bb20 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62  ferFKs ){.    db
2bb30 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2bb40 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2bb50 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
2bb60 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  p1 ){.    db->nD
2bb70 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70  eferredCons += p
2bb80 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p2;.  }else{
2bb90 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74  .    p->nFkConst
2bba0 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32  raint += pOp->p2
2bbb0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2bbc0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49  ../* Opcode: FkI
2bbd0 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  fZero P1 P2 * * 
2bbe0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2bbf0 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67  f fkctr[P1]==0 g
2bc00 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
2bc10 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
2bc20 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
2bc30 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2bc40 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
2bc50 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
2bc60 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2bc70 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
2bc80 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
2bc90 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
2bca0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
2bcb0 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
2bcc0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
2bcd0 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
2bce0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2bcf0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
2bd00 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
2bd10 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
2bd20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
2bd30 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2bd40 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
2bd50 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
2bd60 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
2bd70 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
2bd80 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
2bd90 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
2bda0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2bdb0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
2bdc0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2bdd0 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
2bde0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2bdf0 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
2be00 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2be10 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  n(db->nDeferredC
2be20 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2be30 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2be40 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64  0, 2);.    if( d
2be50 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2be60 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2be70 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2be80 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2be90 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
2bea0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
2beb0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
2bec0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2bed0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2bee0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  ;.    if( p->nFk
2bef0 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2bf00 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2bf10 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20  mCons==0 ) pc = 
2bf20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
2bf30 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2bf40 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2bf50 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2bf60 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
2bf70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2bf80 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
2bf90 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
2bfa0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2bfb0 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72  sis: r[P1]=max(r
2bfc0 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  [P1],r[P2]).**.*
2bfd0 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74  * P1 is a regist
2bfe0 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
2bff0 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20  rame of this VM 
2c000 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20  (the root frame 
2c010 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20  is.** different 
2c020 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
2c030 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69   frame if this i
2c040 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65  nstruction is be
2c050 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20  ing executed.** 
2c060 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f  within a sub-pro
2c070 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76  gram). Set the v
2c080 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2c090 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d   P1 to the maxim
2c0a0 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75  um of .** its cu
2c0b0 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20  rrent value and 
2c0c0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2c0d0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2c0e0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2c0f0 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
2c100 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
2c110 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
2c120 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
2c130 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
2c140 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
2c150 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2c160 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2c170 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
2c180 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
2c190 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2c1a0 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
2c1b0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2c1c0 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
2c1d0 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2c1e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
2c1f0 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
2c200 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2c210 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2c220 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
2c230 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2c240 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
2c250 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2c260 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
2c270 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2c280 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
2c290 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
2c2a0 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
2c2b0 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
2c2c0 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
2c2d0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2c2e0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2c2f0 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
2c300 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
2c310 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2c320 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67  is: if r[P1]>0 g
2c330 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  oto P2.**.** If 
2c340 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2c350 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
2c360 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
2c370 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
2c380 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2c390 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2c3a0 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2c3b0 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2c3c0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2c3d0 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2c3e0 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2c3f0 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2c400 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2c410 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2c420 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2c430 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2c440 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2c450 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2c460 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2c470 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75  chTaken( pIn1->u
2c480 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i>0, 2);.  if( 
2c490 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
2c4a0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2c4b0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2c4c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c4d0 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a   IfNeg P1 P2 * *
2c4e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2c4f0 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74 6f 20  if r[P1]<0 goto 
2c500 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
2c510 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2c520 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
2c530 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20  n zero, jump to 
2c540 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  P2. .**.** It is
2c550 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
2c560 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2c570 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
2c580 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
2c590 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2c5a0 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
2c5b0 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
2c5c0 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
2c5d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67  */.case OP_IfNeg
2c5e0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2c5f0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2c600 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2c610 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2c620 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2c630 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2c640 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2c650 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  <0, 2);.  if( pI
2c660 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20  n1->u.i<0 ){.   
2c670 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2c680 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2c690 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2c6a0 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  fZero P1 P2 P3 *
2c6b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2c6c0 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b  r[P1]+=P3, if r[
2c6d0 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  P1]==0 goto P2.*
2c6e0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
2c6f0 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2c700 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
2c710 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f  dd literal P3 to
2c720 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
2c730 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 49   register P1.  I
2c740 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
2c750 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20  exactly 0, jump 
2c760 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
2c770 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
2c780 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
2c790 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
2c7a0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
2c7b0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
2c7c0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
2c7d0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
2c7e0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
2c7f0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
2c800 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
2c810 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2c820 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2c830 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c840 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2c850 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d  M_Int );.  pIn1-
2c860 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b  >u.i += pOp->p3;
2c870 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2c880 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
2c890 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
2c8a0 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
2c8b0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2c8c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2c8d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
2c8e0 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
2c8f0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2c900 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
2c910 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
2c920 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
2c930 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
2c940 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
2c950 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
2c960 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
2c970 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
2c980 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2c990 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
2c9a0 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
2c9b0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20   function.  Use 
2c9c0 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61  register.** P3 a
2c9d0 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2c9e0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
2c9f0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
2ca00 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
2ca10 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
2ca20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63  successors..*/.c
2ca30 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
2ca40 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
2ca50 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   i;.  Mem *pMem;
2ca60 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20  .  Mem *pRec;.  
2ca70 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2ca80 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
2ca90 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
2caa0 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
2cab0 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
2cac0 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70    pRec = &aMem[p
2cad0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
2cae0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
2caf0 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
2cb00 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
2cb10 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
2cb20 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
2cb30 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
2cb40 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  c) );.    apVal[
2cb50 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d  i] = pRec;.    m
2cb60 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2cb70 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  p, pRec);.  }.  
2cb80 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
2cb90 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
2cba0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2cbb0 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
2cbc0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
2cbd0 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
2cbe0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2cbf0 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
2cc00 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
2cc10 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2cc20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
2cc30 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
2cc40 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
2cc50 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
2cc60 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
2cc70 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
2cc80 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  oll = 0;.  ctx.s
2cc90 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 69  kipFlag = 0;.  i
2cca0 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 75  f( ctx.pFunc->fu
2ccb0 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ncFlags & SQLITE
2ccc0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
2ccd0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2cce0 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20  p>p->aOp );.    
2ccf0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2cd00 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
2cd10 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
2cd20 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
2cd30 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
2cd40 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
2cd50 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
2cd60 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75  ;.  }.  (ctx.pFu
2cd70 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c  nc->xStep)(&ctx,
2cd80 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49   n, apVal); /* I
2cd90 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
2cda0 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69  0 */.  if( ctx.i
2cdb0 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
2cdc0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2cdd0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2cde0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
2cdf0 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
2ce00 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
2ce10 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69  isError;.  }.  i
2ce20 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20  f( ctx.skipFlag 
2ce30 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2ce40 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
2ce50 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
2ce60 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b   i = pOp[-1].p1;
2ce70 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c  .    if( i ) sql
2ce80 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2ce90 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29  t64(&aMem[i], 1)
2cea0 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33  ;.  }..  sqlite3
2ceb0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
2cec0 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b  ctx.s);..  break
2ced0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2cee0 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
2cef0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2cf00 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e  s: accum=r[P1] N
2cf10 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  =P2.**.** Execut
2cf20 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
2cf30 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2cf40 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
2cf50 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
2cf60 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
2cf70 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2cf80 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
2cf90 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
2cfa0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
2cfb0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
2cfc0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
2cfd0 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
2cfe0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2cff0 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
2d000 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
2d010 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
2d020 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
2d030 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
2d040 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
2d050 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
2d060 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
2d070 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
2d080 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
2d090 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
2d0a0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
2d0b0 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
2d0c0 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
2d0d0 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
2d0e0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
2d0f0 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
2d100 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
2d110 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
2d120 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2d130 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2d140 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
2d150 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2d160 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  r) );.  pMem = &
2d170 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2d180 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
2d190 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
2d1a0 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
2d1b0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2d1c0 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
2d1d0 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
2d1e0 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
2d1f0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2d200 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2d210 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2d220 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2d230 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
2d240 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2d250 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
2d260 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
2d270 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2d280 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
2d290 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
2d2a0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
2d2b0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2d2c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2d2d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d2e0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
2d2f0 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
2d300 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
2d310 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
2d320 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
2d330 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
2d340 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
2d350 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
2d360 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
2d370 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
2d380 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
2d390 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53 54 41  FULL.** or RESTA
2d3a0 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20  RT.  Write 1 or 
2d3b0 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69  0 into mem[P3] i
2d3c0 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  f the checkpoint
2d3d0 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49   returns.** SQLI
2d3e0 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20  TE_BUSY or not, 
2d3f0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57  respectively.  W
2d400 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  rite the number 
2d410 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a  of pages in the.
2d420 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65  ** WAL after the
2d430 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f   checkpoint into
2d440 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74   mem[P3+1] and t
2d450 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2d460 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c  es.** in the WAL
2d470 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
2d480 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74  checkpointed aft
2d490 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2d4a0 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69  t.** completes i
2d4b0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20  nto mem[P3+2].  
2d4c0 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72  However on an er
2d4d0 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  ror, mem[P3+1] a
2d4e0 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20  nd.** mem[P3+2] 
2d4f0 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
2d500 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  to -1..*/.case O
2d510 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a  P_Checkpoint: {.
2d520 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
2d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d540 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
2d550 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b  r */.  int aRes[
2d560 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  3];             
2d570 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
2d580 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
2d590 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2d5a0 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
2d5b0 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a  results here */.
2d5c0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2d5d0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2d5e0 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52  Res[0] = 0;.  aR
2d5f0 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20  es[1] = aRes[2] 
2d600 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20  = -1;.  assert( 
2d610 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2d620 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2d630 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  VE.       || pOp
2d640 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2d650 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20  CKPOINT_FULL.   
2d660 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2d670 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2d680 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b 0a 20  T_RESTART.  );. 
2d690 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
2d6a0 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
2d6b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
2d6c0 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
2d6d0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2d6e0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
2d6f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2d700 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
2d710 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
2d720 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2d730 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
2d740 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
2d750 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2d760 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
2d770 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
2d780 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
2d790 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2d7a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2d7b0 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
2d7c0 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
2d7d0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61  P3 * *.**.** Cha
2d7e0 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
2d7f0 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65  mode of database
2d800 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75   P1 to P3. P3 mu
2d810 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  st be one of the
2d820 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  .** PAGER_JOURNA
2d830 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73  LMODE_XXX values
2d840 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65  . If changing be
2d850 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75  tween the variou
2d860 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f  s rollback.** mo
2d870 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75  des (delete, tru
2d880 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20  ncate, persist, 
2d890 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c  off and memory),
2d8a0 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c   this is a simpl
2d8b0 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20  e.** operation. 
2d8c0 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65  No IO is require
2d8d0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e  d..**.** If chan
2d8e0 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74  ging into or out
2d8f0 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65   of WAL mode the
2d900 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f   procedure is mo
2d910 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a  re complicated..
2d920 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74  **.** Write a st
2d930 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
2d940 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61  the final journa
2d950 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74  l-mode to regist
2d960 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
2d970 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b  P_JournalMode: {
2d980 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2d990 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65  elease */.  Btre
2d9a0 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
2d9b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2d9c0 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
2d9d0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
2d9e0 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
2d9f0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
2da00 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
2da10 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
2da20 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da40 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
2da50 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
2da60 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
2da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2da80 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
2da90 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65  l mode */.#ifnde
2daa0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2dab0 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  L.  const char *
2dac0 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20  zFilename;      
2dad0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64      /* Name of d
2dae0 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
2daf0 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69   pPager */.#endi
2db00 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  f..  eNew = pOp-
2db10 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
2db20 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2db30 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
2db40 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2db50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2db60 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
2db70 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2db80 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
2db90 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
2dba0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2dbb0 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
2dbc0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2dbd0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2dbe0 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
2dbf0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2dc00 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
2dc10 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2dc20 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
2dc30 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
2dc40 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2dc50 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2dc60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2dc70 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
2dc80 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
2dc90 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
2dca0 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
2dcb0 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
2dcc0 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
2dcd0 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
2dce0 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
2dcf0 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
2dd00 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
2dd10 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
2dd20 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
2dd30 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
2dd40 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2dd50 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
2dd60 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2dd70 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
2dd80 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
2dd90 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
2dda0 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
2ddb0 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
2ddc0 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
2ddd0 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
2dde0 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
2ddf0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
2de00 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
2de10 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
2de20 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
2de30 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
2de40 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2de50 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
2de60 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
2de70 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
2de80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
2de90 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
2dea0 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
2deb0 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
2dec0 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
2ded0 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
2dee0 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
2def0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2df00 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
2df10 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
2df20 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2df30 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
2df40 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2df50 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
2df60 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
2df70 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
2df80 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
2df90 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2dfa0 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
2dfb0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2dfc0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
2dfd0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
2dfe0 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
2dff0 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
2e000 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
2e010 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
2e020 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2e030 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
2e040 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
2e050 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   );.      break;
2e060 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
2e070 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
2e080 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e090 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
2e0a0 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
2e0b0 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
2e0c0 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
2e0d0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
2e0e0 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
2e0f0 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
2e100 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
2e110 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
2e120 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
2e130 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
2e140 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
2e150 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
2e160 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
2e170 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
2e180 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
2e190 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
2e1a0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2e1b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
2e1c0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
2e1d0 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
2e1e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2e1f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
2e200 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2e210 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2e220 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
2e230 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
2e240 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2e250 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
2e260 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
2e270 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
2e280 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
2e290 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
2e2a0 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
2e2b0 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
2e2c0 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
2e2d0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2e2e0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2e2f0 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
2e300 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
2e310 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
2e320 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
2e330 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
2e340 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
2e350 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
2e360 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
2e370 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
2e380 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
2e390 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
2e3a0 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
2e3b0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
2e3c0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
2e3d0 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
2e3e0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2e3f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2e400 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2e410 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
2e420 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
2e430 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2e440 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
2e450 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
2e460 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
2e470 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
2e480 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2e490 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2e4a0 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  }.  eNew = sqlit
2e4b0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2e4c0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2e4d0 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  ew);..  pOut = &
2e4e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2e4f0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2e500 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
2e510 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
2e520 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
2e530 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
2e540 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
2e550 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
2e560 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
2e570 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
2e580 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
2e590 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2e5a0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
2e5b0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
2e5c0 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
2e5d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
2e5e0 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
2e5f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2e600 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
2e610 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2e620 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
2e630 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
2e640 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
2e650 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
2e660 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
2e670 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
2e680 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
2e690 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
2e6a0 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
2e6b0 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
2e6c0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
2e6d0 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
2e6e0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2e6f0 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65  Vacuum: {.  asse
2e700 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2e710 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2e720 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70  ite3RunVacuum(&p
2e730 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a  ->zErrMsg, db);.
2e740 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2e750 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
2e760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2e770 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
2e780 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
2e790 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2e7a0 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
2e7b0 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
2e7c0 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
2e7d0 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
2e7e0 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
2e7f0 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
2e800 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
2e810 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2e820 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
2e830 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
2e840 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2e850 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2e860 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
2e870 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2e880 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
2e890 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2e8a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2e8b0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2e8c0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
2e8d0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
2e8e0 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
2e8f0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2e900 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2e910 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
2e920 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2e930 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2e940 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
2e950 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  Bt);.  VdbeBranc
2e960 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54  hTaken(rc==SQLIT
2e970 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28  E_DONE,2);.  if(
2e980 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2e990 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2e9a0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2e9b0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2e9c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2e9d0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2e9e0 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2e9f0 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2ea00 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2ea10 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65  ents to become e
2ea20 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72  xpired. An expir
2ea30 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2ea40 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
2ea50 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  ror code of SQLI
2ea60 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20  TE_SCHEMA if it 
2ea70 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64  is ever executed
2ea80 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65   .** (via sqlite
2ea90 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a  3_step())..** .*
2eaa0 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
2eab0 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
2eac0 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
2ead0 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
2eae0 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
2eaf0 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
2eb00 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
2eb10 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63  atement is affec
2eb20 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  ted. .*/.case OP
2eb30 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
2eb40 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
2eb50 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2eb60 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2eb70 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
2eb80 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
2eb90 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2eba0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2ebb0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2ebc0 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
2ebd0 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
2ebe0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2ebf0 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d  is: iDb=P1 root=
2ec00 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a  P2 write=P3.**.*
2ec10 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
2ec20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
2ec30 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
2ec40 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
2ec50 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
2ec60 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
2ec70 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
2ec80 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
2ec90 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2eca0 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
2ecb0 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
2ecc0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
2ecd0 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
2ece0 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
2ecf0 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
2ed00 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
2ed10 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
2ed20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
2ed30 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
2ed40 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
2ed50 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
2ed60 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
2ed70 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2ed80 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
2ed90 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
2eda0 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
2edb0 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
2edc0 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
2edd0 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
2ede0 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
2edf0 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
2ee00 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
2ee10 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
2ee20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  (u8)pOp->p3;.  i
2ee30 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
2ee40 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
2ee50 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
2ee60 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
2ee70 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
2ee80 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
2ee90 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
2eea0 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
2eeb0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2eec0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2eed0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61  p1))!=0 );.    a
2eee0 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
2eef0 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
2ef00 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
2ef10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2ef20 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
2ef30 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
2ef40 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
2ef50 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  ;.    if( (rc&0x
2ef60 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
2ef70 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  ED ){.      cons
2ef80 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
2ef90 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  >p4.z;.      sql
2efa0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2efb0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2efc0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
2efd0 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
2efe0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2eff0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2f000 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
2f010 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
2f020 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f030 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2f040 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
2f050 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
2f060 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
2f070 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
2f080 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2f090 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
2f0a0 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
2f0b0 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
2f0c0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
2f0d0 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
2f0e0 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
2f0f0 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
2f100 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
2f110 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
2f120 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
2f130 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
2f140 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
2f150 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
2f160 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
2f170 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
2f180 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
2f190 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
2f1a0 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
2f1b0 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
2f1c0 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
2f1d0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
2f1e0 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
2f1f0 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33   pVTab ) sqlite3
2f200 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2f210 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62  (p, pVTab->pVtab
2f220 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2f230 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f240 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f250 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2f260 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f270 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2f280 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20   VCreate P1 * * 
2f290 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2f2a0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2f2b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2f2c0 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c  database P1. Cal
2f2d0 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65  l the xCreate me
2f2e0 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74  thod.** for that
2f2f0 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
2f300 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20  OP_VCreate: {.  
2f310 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2f320 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
2f330 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2f340 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  z, &p->zErrMsg);
2f350 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2f360 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2f370 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2f380 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2f390 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f3a0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2f3b0 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50  Destroy P1 * * P
2f3c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2f3d0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
2f3e0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
2f3f0 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c  atabase P1.  Cal
2f400 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d  l the xDestroy m
2f410 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74  ethod.** of that
2f420 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
2f430 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20  OP_VDestroy: {. 
2f440 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2f450 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 2;.  rc = sql
2f460 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
2f470 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  roy(db, pOp->p1,
2f480 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70   pOp->p4.z);.  p
2f490 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2f4a0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23   0;.  break;.}.#
2f4b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f4c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2f4d0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2f4e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f4f0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2f500 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
2f510 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2f520 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2f530 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2f540 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2f550 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2f560 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
2f570 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
2f580 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
2f590 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
2f5a0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
2f5b0 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
2f5c0 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
2f5d0 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
2f5e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2f5f0 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
2f600 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2f610 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2f620 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2f630 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2f640 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
2f650 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
2f660 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b  r );.  pCur = 0;
2f670 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
2f680 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   0;.  pVtab = pO
2f690 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2f6a0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2f6b0 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
2f6c0 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
2f6d0 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62  ;.  assert(pVtab
2f6e0 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20   && pModule);.  
2f6f0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
2f700 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61  pen(pVtab, &pVta
2f710 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69  bCursor);.  sqli
2f720 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2f730 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
2f740 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d   if( SQLITE_OK==
2f750 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69  rc ){.    /* Ini
2f760 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f  tialize sqlite3_
2f770 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65  vtab_cursor base
2f780 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56   class */.    pV
2f790 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2f7a0 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f   = pVtab;..    /
2f7b0 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62  * Initialize vdb
2f7c0 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
2f7d0 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c  */.    pCur = al
2f7e0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
2f7f0 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20  pOp->p1, 0, -1, 
2f800 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72  0);.    if( pCur
2f810 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e   ){.      pCur->
2f820 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56  pVtabCursor = pV
2f830 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 7d  tabCursor;.    }
2f840 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2f850 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2f860 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
2f870 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
2f880 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2f890 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2f8a0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2f8b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2f8c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f8d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f8e0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
2f8f0 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
2f900 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2f910 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c   iplan=r[P3] zpl
2f920 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31  an='P4'.**.** P1
2f930 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
2f940 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
2f950 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
2f960 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
2f970 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
2f980 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
2f990 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
2f9a0 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
2f9b0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
2f9c0 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
2f9d0 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
2f9e0 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
2f9f0 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
2fa00 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
2fa10 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
2fa20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
2fa30 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
2fa40 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
2fa50 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2fa60 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
2fa70 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
2fa80 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
2fa90 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
2faa0 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
2fab0 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
2fac0 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
2fad0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
2fae0 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
2faf0 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
2fb00 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
2fb10 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
2fb20 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
2fb30 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
2fb40 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
2fb50 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
2fb60 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
2fb70 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
2fb80 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
2fb90 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
2fba0 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
2fbb0 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
2fbc0 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
2fbd0 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
2fbe0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
2fbf0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
2fc00 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
2fc10 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
2fc20 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
2fc30 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
2fc40 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
2fc50 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
2fc60 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2fc70 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2fc80 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
2fc90 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
2fca0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2fcb0 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
2fcc0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2fcd0 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73  Vtab;.  VdbeCurs
2fce0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20  or *pCur;.  int 
2fcf0 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  res;.  int i;.  
2fd00 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20  Mem **apArg;..  
2fd10 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70  pQuery = &aMem[p
2fd20 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
2fd30 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
2fd40 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
2fd50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2fd60 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2fd70 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47  pQuery) );.  REG
2fd80 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2fd90 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
2fda0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2fdb0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  tabCursor );.  p
2fdc0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75  VtabCursor = pCu
2fdd0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r->pVtabCursor;.
2fde0 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43    pVtab = pVtabC
2fdf0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2fe00 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2fe10 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
2fe20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
2fe30 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
2fe40 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
2fe50 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
2fe60 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
2fe70 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
2fe80 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
2fe90 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
2fea0 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
2feb0 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
2fec0 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
2fed0 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
2fee0 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
2fef0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41  res = 0;.    apA
2ff00 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
2ff10 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
2ff20 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
2ff30 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
2ff40 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a  rgc[i+1];.    }.
2ff50 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
2ff60 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  thod = 1;.    rc
2ff70 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
2ff80 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c  ter(pVtabCursor,
2ff90 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
2ffa0 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
2ffb0 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
2ffc0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73  ethod = 0;.    s
2ffd0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2ffe0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
2fff0 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
30000 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
30010 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
30020 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72  xEof(pVtabCursor
30030 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56 64 62  );.    }.    Vdb
30040 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
30050 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
30060 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
30070 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
30080 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
30090 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
300a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
300b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
300c0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
300d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
300e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
300f0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
30100 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
30110 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
30120 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29  [P3]=vcolumn(P2)
30130 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
30140 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
30150 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
30160 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
30170 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
30180 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
30190 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
301a0 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
301b0 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
301c0 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
301d0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
301e0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
301f0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
30200 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
30210 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
30220 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
30230 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
30240 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
30250 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
30260 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
30270 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
30280 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
30290 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
302a0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
302b0 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
302c0 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
302d0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
302e0 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
302f0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
30300 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
30310 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
30320 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
30330 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
30340 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
30350 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
30360 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
30370 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
30380 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65  >xColumn );.  me
30390 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20  mset(&sContext, 
303a0 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65  0, sizeof(sConte
303b0 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  xt));..  /* The 
303c0 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
303d0 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
303e0 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
303f0 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63   Move.  ** the c
30400 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20  urrent contents 
30410 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f  to sContext.s so
30420 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65   in case the use
30430 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a  r-function .  **
30440 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72   can use the alr
30450 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
30460 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
30470 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20   allocating a . 
30480 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a   ** new one..  *
30490 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
304a0 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74  emMove(&sContext
304b0 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65  .s, pDest);.  Me
304c0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43  mSetTypeFlag(&sC
304d0 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75  ontext.s, MEM_Nu
304e0 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f  ll);..  rc = pMo
304f0 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
30500 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  ur->pVtabCursor,
30510 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d   &sContext, pOp-
30520 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2);.  sqlite3V
30530 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
30540 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
30550 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
30560 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43  r ){.    rc = sC
30570 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a  ontext.isError;.
30580 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
30590 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
305a0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
305b0 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65   P3 register. We
305c0 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65  .  ** do this re
305d0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
305e0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72  her or not an er
305f0 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20  ror occurred to 
30600 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20  ensure any.  ** 
30610 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69  dynamic allocati
30620 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73  on in sContext.s
30630 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20   (a Mem struct) 
30640 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20  is  released..  
30650 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
30660 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
30670 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f  sContext.s, enco
30680 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
30690 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73  VdbeMemMove(pDes
306a0 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b  t, &sContext.s);
306b0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
306c0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
306d0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
306e0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
306f0 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ..  if( sqlite3V
30700 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
30710 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
30720 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
30730 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
30740 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30750 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30760 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30770 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30780 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
30790 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
307a0 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
307b0 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
307c0 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
307d0 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
307e0 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
307f0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
30800 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
30810 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
30820 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
30830 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
30840 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
30850 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
30860 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
30870 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
30880 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
30890 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
308a0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
308b0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
308c0 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
308d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
308e0 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
308f0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
30900 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
30910 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
30920 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
30930 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
30940 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
30950 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
30960 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
30970 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
30980 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
30990 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
309a0 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
309b0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
309c0 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
309d0 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
309e0 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
309f0 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
30a00 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
30a10 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
30a20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
30a30 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
30a40 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
30a50 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
30a60 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
30a70 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
30a80 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
30a90 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
30aa0 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
30ab0 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
30ac0 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
30ad0 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
30ae0 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
30af0 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
30b00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
30b10 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e  rsor..  */.  p->
30b20 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
30b30 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
30b40 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56  ->xNext(pCur->pV
30b50 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d  tabCursor);.  p-
30b60 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
30b70 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  0;.  sqlite3Vtab
30b80 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
30b90 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
30ba0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
30bb0 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
30bc0 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
30bd0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  abCursor);.  }. 
30be0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
30bf0 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20  (!res,2);.  if( 
30c00 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
30c10 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
30c20 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
30c30 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
30c40 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  - 1;.  }.  goto 
30c50 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
30c60 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
30c70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30c80 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30c90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30ca0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
30cb0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
30cc0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
30cd0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
30ce0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
30cf0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
30d00 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
30d10 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
30d20 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
30d30 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
30d40 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
30d50 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
30d60 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
30d70 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
30d80 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
30d90 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
30da0 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
30db0 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
30dc0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
30dd0 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
30de0 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
30df0 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
30e00 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65  ;.  pName = &aMe
30e10 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
30e20 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f  sert( pVtab->pMo
30e30 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b  dule->xRename );
30e40 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
30e50 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a  Valid(pName) );.
30e60 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
30e70 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45  dOnly==0 );.  RE
30e80 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
30e90 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
30ea0 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
30eb0 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
30ec0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
30ed0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
30ee0 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
30ef0 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
30f00 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
30f10 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
30f20 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
30f30 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
30f40 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
30f50 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
30f60 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
30f70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
30f80 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
30f90 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
30fa0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
30fb0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20  , pName->z);.   
30fc0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
30fd0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
30fe0 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
30ff0 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
31000 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
31010 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31020 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
31030 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61  /* Opcode: VUpda
31040 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
31050 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64  5.** Synopsis: d
31060 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a  ata=r[P3@P2].**.
31070 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
31080 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
31090 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
310a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
310b0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
310c0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
310d0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
310e0 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
310f0 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
31100 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
31110 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
31120 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
31130 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
31140 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
31150 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
31160 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
31170 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
31180 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
31190 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
311a0 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
311b0 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
311c0 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
311d0 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
311e0 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
311f0 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
31200 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
31210 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
31220 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
31230 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
31240 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
31250 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
31260 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
31270 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
31280 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
31290 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
312a0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
312b0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
312c0 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
312d0 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
312e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
312f0 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
31300 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
31310 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
31320 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
31330 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
31340 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
31350 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
31360 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
31370 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
31380 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
31390 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
313a0 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
313b0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
313c0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
313d0 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
313e0 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
313f0 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
31400 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
31410 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
31420 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
31430 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
31440 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
31450 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
31460 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
31470 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
31480 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
31490 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65  *.** P5 is the e
314a0 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45  rror actions (OE
314b0 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69  _Replace, OE_Fai
314c0 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74  l, OE_Ignore, et
314d0 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69  c) to.** apply i
314e0 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
314f0 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75  constraint failu
31500 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20  re on an insert 
31510 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61  or update..*/.ca
31520 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
31530 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
31540 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
31550 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
31560 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
31570 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
31580 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
31590 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
315a0 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72  em *pX;..  asser
315b0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20  t( pOp->p2==1   
315c0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
315d0 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f  =OE_Fail   || pO
315e0 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  p->p5==OE_Rollba
315f0 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ck .       || pO
31600 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p5==OE_Abort 
31610 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  || pOp->p5==OE_I
31620 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  gnore || pOp->p5
31630 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29  ==OE_Replace.  )
31640 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
31650 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
31660 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
31670 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
31680 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
31690 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
316a0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
316b0 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
316c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
316d0 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
316e0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
316f0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
31700 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43  {.    u8 vtabOnC
31710 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74  onflict = db->vt
31720 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
31730 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
31740 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d  rg;.    pX = &aM
31750 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
31760 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
31770 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73  ; i++){.      as
31780 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
31790 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  (pX) );.      me
317a0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
317b0 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41  , pX);.      apA
317c0 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20  rg[i] = pX;.    
317d0 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20    pX++;.    }.  
317e0 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
317f0 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  lict = pOp->p5;.
31800 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
31810 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c  ->xUpdate(pVtab,
31820 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72   nArg, apArg, &r
31830 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76  owid);.    db->v
31840 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
31850 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
31860 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
31870 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
31880 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
31890 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
318a0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
318b0 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
318c0 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
318d0 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
318e0 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
318f0 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
31900 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72   = lastRowid = r
31910 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20  owid;.    }.    
31920 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
31930 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
31940 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61   && pOp->p4.pVta
31950 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29  b->bConstraint )
31960 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
31970 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p5==OE_Ignore )
31980 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
31990 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
319a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
319b0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
319c0 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  ((pOp->p5==OE_Re
319d0 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72  place) ? OE_Abor
319e0 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  t : pOp->p5);.  
319f0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
31a00 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  .      p->nChang
31a10 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e++;.    }.  }. 
31a20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31a30 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31a40 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
31a50 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
31a60 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
31a70 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
31a80 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
31a90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
31aa0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
31ab0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
31ac0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
31ad0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
31ae0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
31af0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
31b00 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
31b10 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
31b20 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
31b30 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61  eeLastPage(db->a
31b40 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29  Db[pOp->p1].pBt)
31b50 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
31b60 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53  dif...#ifndef  S
31b70 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
31b80 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
31b90 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20  de: MaxPgcnt P1 
31ba0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
31bb0 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d  Try to set the m
31bc0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
31bd0 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  t for database P
31be0 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
31bf0 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20  n P3..** Do not 
31c00 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  let the maximum 
31c10 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20  page count fall 
31c20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e  below the curren
31c30 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64  t page count and
31c40 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  .** do not chang
31c50 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
31c60 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69  ge count value i
31c70 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53  f P3==0..**.** S
31c80 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  tore the maximum
31c90 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65   page count afte
31ca0 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20  r the change in 
31cb0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
31cc0 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74  case OP_MaxPgcnt
31cd0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
31ce0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
31cf0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
31d00 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74  int newMax;.  Bt
31d10 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74  ree *pBt;..  pBt
31d20 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
31d30 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61  p1].pBt;.  newMa
31d40 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  x = 0;.  if( pOp
31d50 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d  ->p3 ){.    newM
31d60 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ax = sqlite3Btre
31d70 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a  eLastPage(pBt);.
31d80 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c      if( newMax <
31d90 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
31da0 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75  p3 ) newMax = (u
31db0 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b  nsigned)pOp->p3;
31dc0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
31dd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
31de0 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c  axPageCount(pBt,
31df0 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61   newMax);.  brea
31e00 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  k;.}.#endif.../*
31e10 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20   Opcode: Init * 
31e20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
31e30 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74  opsis:  Start at
31e40 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61   P2.**.** Progra
31e50 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  ms contain a sin
31e60 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  gle instance of 
31e70 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74  this opcode as t
31e80 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a  he very first.**
31e90 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49   opcode..**.** I
31ea0 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61  f tracing is ena
31eb0 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c  bled (by the sql
31ec0 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e  ite3_trace()) in
31ed0 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a  terface, then.**
31ee0 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
31ef0 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50  g contained in P
31f00 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20  4 is emitted on 
31f10 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
31f20 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20  ck..** Or if P4 
31f30 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68  is blank, use th
31f40 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  e string returne
31f50 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c  d by sqlite3_sql
31f60 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  ()..**.** If P2 
31f70 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d  is not zero, jum
31f80 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
31f90 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
31fa0 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Init: {         
31fb0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68   /* jump */.  ch
31fc0 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68  ar *zTrace;.  ch
31fd0 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 4f  ar *z;..  if( pO
31fe0 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70 63 20  p->p2 ){.    pc 
31ff0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
32000 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
32010 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 69  E_OMIT_TRACE.  i
32020 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20  f( db->xTrace.  
32030 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72   && !p->doingRer
32040 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65  un.   && (zTrace
32050 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
32060 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
32070 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  Sql))!=0.  ){.  
32080 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62    z = sqlite3Vdb
32090 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54  eExpandSql(p, zT
320a0 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78  race);.    db->x
320b0 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
320c0 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c  Arg, z);.    sql
320d0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
320e0 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51  );.  }.#ifdef SQ
320f0 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54  LITE_USE_FCNTL_T
32100 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d 20  RACE.  zTrace = 
32110 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
32120 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
32130 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20  );.  if( zTrace 
32140 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
32150 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
32160 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
32170 20 20 69 66 28 20 4d 41 53 4b 42 49 54 28 69 29    if( MASKBIT(i)
32180 20 26 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 29   & p->btreeMask)
32190 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
321a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
321b0 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64  le_control(db, d
321c0 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
321d0 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52   SQLITE_FCNTL_TR
321e0 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  ACE, zTrace);.  
321f0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
32200 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e  * SQLITE_USE_FCN
32210 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64  TL_TRACE */.#ifd
32220 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
32230 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
32240 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
32250 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54  ce)!=0.   && (zT
32260 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
32270 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
32280 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
32290 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62  {.    sqlite3Deb
322a0 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
322b0 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
322c0 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  ce);.  }.#endif 
322d0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
322e0 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
322f0 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a  ITE_OMIT_TRACE *
32300 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  /.  break;.}.../
32310 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
32320 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
32330 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73  o nothing.  This
32340 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
32350 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20  often useful as 
32360 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e  a jump.** destin
32370 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20  ation..*/./*.** 
32380 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69  The magic Explai
32390 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c  n opcode are onl
323a0 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20  y inserted when 
323b0 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63  explain==2 (whic
323c0 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77  h.** is to say w
323d0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
323e0 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61  QUERY PLAN synta
323f0 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54  x is used.).** T
32400 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72  his opcode recor
32410 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ds information f
32420 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  rom the optimize
32430 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a  r.  It is the.**
32440 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e   the same as a n
32450 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f  o-op.  This opco
32460 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73  desnever appears
32470 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72   in a real VM pr
32480 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c  ogram..*/.defaul
32490 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
324a0 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   This is really 
324b0 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45  OP_Noop and OP_E
324c0 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65  xplain */.  asse
324d0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
324e0 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d  =OP_Noop || pOp-
324f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  >opcode==OP_Expl
32500 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ain );.  break;.
32510 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }../************
32520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32560 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f  *.** The cases o
32570 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  f the switch sta
32580 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69  tement above thi
32590 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c  s line should al
325a0 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a  l be indented.**
325b0 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
325c0 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
325d0 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62   6 spaces have b
325e0 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69  een removed to i
325f0 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65  mprove the.** re
32600 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d  adability.  From
32610 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64   this point on d
32620 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20  own, the normal 
32630 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65  indentation rule
32640 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65  s are.** restore
32650 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d..*************
32660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
326a0 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20  /.    }..#ifdef 
326b0 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
326c0 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61   {.      u64 ela
326d0 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77  psed = sqlite3Hw
326e0 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a  time() - start;.
326f0 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65        pOp->cycle
32700 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20  s += elapsed;.  
32710 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a      pOp->cnt++;.
32720 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
32730 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
32740 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
32750 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
32760 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
32770 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
32780 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
32790 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
327a0 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
327b0 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
327c0 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
327d0 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
327e0 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
327f0 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
32800 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
32810 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
32820 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
32830 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
32840 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
32850 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
32860 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
32870 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
32880 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
32890 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
328a0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
328b0 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
328c0 69 66 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e  if( rc!=0 ) prin
328d0 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29  tf("rc=%d\n",rc)
328e0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
328f0 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c  >opflags & (OPFL
32900 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
32910 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b  E|OPFLG_OUT2) ){
32920 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
32930 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20  rTrace(pOp->p2, 
32940 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
32950 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
32960 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
32970 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
32980 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
32990 54 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26  Trace(pOp->p3, &
329a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
329b0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
329c0 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
329d0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
329e0 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
329f0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
32a00 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
32a10 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
32a20 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
32a30 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
32a40 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
32a50 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
32a60 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
32a70 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
32a80 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
32a90 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
32aa0 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
32ab0 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
32ac0 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65  = rc;.  testcase
32ad0 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
32ae0 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
32af0 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72  .  sqlite3_log(r
32b00 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62  c, "statement ab
32b10 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d  orts at %d: [%s]
32b20 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
32b30 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d            pc, p-
32b40 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
32b50 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
32b60 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20  eHalt(p);.  if( 
32b70 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
32b80 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c  _NOMEM ) db->mal
32b90 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
32ba0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
32bb0 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53  OR;.  if( resetS
32bc0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29  chemaOnFault>0 )
32bd0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
32be0 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
32bf0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
32c00 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lt-1);.  }..  /*
32c10 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
32c20 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
32c30 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
32c40 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
32c50 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
32c60 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
32c70 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
32c80 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
32c90 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
32ca0 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
32cb0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 74  = lastRowid;.  t
32cc0 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74 65 70  estcase( nVmStep
32cd0 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e  >0 );.  p->aCoun
32ce0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
32cf0 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b  TATUS_VM_STEP] +
32d00 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a  = (int)nVmStep;.
32d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61    sqlite3VdbeLea
32d20 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  ve(p);.  return 
32d30 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  rc;..  /* Jump t
32d40 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69  o here if a stri
32d50 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65  ng or blob large
32d60 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41  r than SQLITE_MA
32d70 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73  X_LENGTH.  ** is
32d80 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20   encountered..  
32d90 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71  */.too_big:.  sq
32da0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
32db0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
32dc0 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  "string or blob 
32dd0 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20  too big");.  rc 
32de0 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b  = SQLITE_TOOBIG;
32df0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
32e00 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
32e10 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
32e20 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
32e30 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20  .  */.no_mem:.  
32e40 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
32e50 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53   = 1;.  sqlite3S
32e60 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
32e70 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f  rMsg, db, "out o
32e80 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63  f memory");.  rc
32e90 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
32ea0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
32eb0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
32ec0 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
32ed0 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
32ee0 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
32ef0 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
32f00 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
32f10 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
32f20 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
32f30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
32f40 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
32f50 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
32f60 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
32f70 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
32f80 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
32f90 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
32fa0 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
32fb0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
32fc0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
32fd0 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
32fe0 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
32ff0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
33000 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
33010 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
33020 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
33030 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
33040 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
33050 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
33060 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
33070 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
33080 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
33090 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
330a0 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
330b0 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
330c0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
330d0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
330e0 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
330f0 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
33100 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.