/ Hex Artifact Content
Login

Artifact d9d2406d8a3baca537d2b05a2354afaa25e1ca84:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65  orter(x) ((x)->e
1810: 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1820: 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20  _SORTER)../*.** 
1830: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1840: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1850: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1860: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1870: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1880: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1890: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
18a0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18b0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18c0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18d0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18e0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18f0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1900: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1910: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1920: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1930: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1940: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1950: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1960: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1970: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1990: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
19a0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19b0: 75 38 20 65 43 75 72 54 79 70 65 20 20 20 20 20  u8 eCurType     
19c0: 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
19d0: 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19e0: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
19f0: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1a00: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1a10: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1a20: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1a30: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1a40: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1a50: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1a60: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1a70: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1a80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1a90: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1aa0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1ab0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1ac0: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1ad0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1ae0: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1af0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b00: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b10: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b20: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1b30: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1b40: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1b50: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1b60: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1b70: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1b80: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1b90: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ba0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1bb0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1bc0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1bd0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1be0: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1bf0: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c00: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c10: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c20: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1c30: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1c40: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1c50: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1c60: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1c70: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1c80: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1c90: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1ca0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1cb0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1cc0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1cd0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1ce0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1cf0: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d00: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d10: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d20: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1d30: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1d40: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1d50: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1d60: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1d70: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1d80: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1d90: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1da0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1db0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1dc0: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1dd0: 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69 7a        ROUND8(siz
1de0: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29  eof(VdbeCursor))
1df0: 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32 29   + 2*sizeof(u32)
1e00: 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20 20  *nField + .     
1e10: 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54   (eCurType==CURT
1e20: 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69 74 65  YPE_BTREE?sqlite
1e30: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e40: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
1e50: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1e60: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1e70: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1e80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1e90: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ea0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1eb0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1ec0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1ed0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ee0: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
1ef0: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
1f00: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1f10: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1f20: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1f30: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
1f40: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
1f50: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
1f60: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
1f70: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
1f80: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
1f90: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
1fa0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
1fb0: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
1fc0: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
1fd0: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
1fe0: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ff0: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2000: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2010: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2020: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2030: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2040: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
2050: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
2060: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2070: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
2080: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2090: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
20a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
20b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
20c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
20d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
20e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
20f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2100: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2110: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2120: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2130: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2140: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2150: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2160: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2170: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2180: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2190: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
21a0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
21b0: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
21c0: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
21d0: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
21e0: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
21f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2200: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2210: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2220: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2230: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2240: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
2250: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
2260: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
2270: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
2280: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2290: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
22a0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
22b0: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
22c0: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
22d0: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
22e0: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
22f0: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2300: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2310: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2320: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2330: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2340: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
2350: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2360: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
2370: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
2380: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
2390: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23a0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
23b0: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
23c0: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
23d0: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
23e0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
23f0: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2410: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2420: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2430: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2440: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
2450: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2460: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2470: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
2480: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
2490: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
24a0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
24b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
24c0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
24d0: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
24e0: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
24f0: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2500: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2510: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2520: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2530: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2540: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2550: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
2560: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2570: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2580: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2590: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25a0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25b0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
25c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
25d0: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
25e0: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
25f0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2600: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2610: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2620: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2630: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2640: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2650: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
2660: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2670: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2680: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2690: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26a0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26b0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
26c0: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
26d0: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
26e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26f0: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2700: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2710: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2720: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2730: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2740: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
2760: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
2770: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2780: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2790: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27b0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
27c0: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
27d0: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
27e0: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
27f0: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2800: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2810: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2820: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2830: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2840: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2850: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
2860: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
2870: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
2880: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2890: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
28a0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
28b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
28d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
28e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
28f0: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2900: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2920: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2930: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2940: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2960: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2970: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2980: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
29a0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29b0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
29c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
29d0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
29e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
29f0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2a00: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2a10: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2a20: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2a30: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2a40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2a50: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2a60: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2a70: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a80: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a90: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2aa0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2ab0: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2ac0: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2ad0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2ae0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2af0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2b00: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2b10: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2b20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2b30: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2b40: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2b50: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b60: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b70: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b80: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b90: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2ba0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2bb0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2bc0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2bd0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2be0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2bf0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2c00: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2c10: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2c20: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2c30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2c40: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2c50: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c60: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ca0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2cb0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2cc0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2cd0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2ce0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2d10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2d20: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2d40: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2d50: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2d60: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d70: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d80: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d90: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2da0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2db0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2dc0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2de0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2df0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2e00: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e10: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e20: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e30: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e40: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2e60: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2e70: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2e80: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2e90: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ea0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
2eb0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
2ec0: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
2ed0: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
2ee0: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
2ef0: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
2f00: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
2f10: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
2f20: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
2f30: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
2f40: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
2f50: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
2f60: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
2f70: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
2f80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2f90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2fa0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2fb0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2fc0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2fd0: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
2fe0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
2ff0: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3000: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3010: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3020: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3030: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3040: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3050: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3060: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
3070: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
3080: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
3090: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
30a0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
30b0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
30c0: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
30d0: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
30e0: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
30f0: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3100: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3110: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3120: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3130: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3140: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3150: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
3160: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
3170: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
3180: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
3190: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
31c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
31d0: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
31e0: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3200: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3210: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3220: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3230: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3240: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3250: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
3260: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
3270: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3280: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
3290: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
32a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
32b0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
32c0: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
32d0: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
32e0: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
32f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3300: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3310: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3320: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3330: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3340: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3350: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
3360: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
3370: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
3380: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
3390: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
33a0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
33b0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
33c0: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
33d0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
33e0: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3410: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3420: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3430: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3440: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3450: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3460: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3470: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3480: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3490: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
34a0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
34b0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
34c0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
34d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
34e0: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3570: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3580: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3590: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
35a0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
35b0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
35c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
35d0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
35e0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
35f0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3600: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3610: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3620: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3640: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3650: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
3660: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3670: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3680: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3690: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
36a0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
36b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
36c0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
36d0: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
36e0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
36f0: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3700: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3710: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3720: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3760: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3770: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3780: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3790: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
37a0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
37b0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
37c0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
37d0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
37e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
37f0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3800: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3810: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3820: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3830: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3850: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3860: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3870: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3880: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3890: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
38a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
38b0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
38c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
38d0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
38e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
38f0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3900: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3910: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3920: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3930: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3940: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3950: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3960: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3970: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3980: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3990: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
39a0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
39b0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
39c0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
39d0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
39e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
39f0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3a00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3a10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3a20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3a30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3a50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3a80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3a90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3aa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ab0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ac0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3ad0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3ae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3af0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3b00: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3b10: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3b20: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3b30: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3b40: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3b50: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3b60: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3b70: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3b80: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3b90: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3ba0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3bb0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3bc0: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3bd0: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3be0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bf0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3c00: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3c10: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3c20: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3c30: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c40: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3c50: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3c60: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3c80: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3cb0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3cc0: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3cd0: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3cf0: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3d00: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3d10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3d20: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3d40: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3d50: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3d60: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3d70: 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
3d80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3d90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3da0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3db0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3dc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3dd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3de0: 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ");.}.#endif..#i
3df0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3e00: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
3e10: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
3e20: 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  if(db->flags&SQL
3e30: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65  ITE_VdbeTrace)re
3e40: 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29  gisterTrace(R,M)
3e50: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
3e60: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
3e70: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
3e80: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
3e90: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
3ea0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
3eb0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
3ec0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
3ed0: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
3ee0: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
3ef0: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
3f00: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
3f10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3f20: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3f30: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3f40: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3f50: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3f60: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3f70: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3f80: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3f90: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3fa0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3fb0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3fc0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3fd0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3fe0: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ff0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
4000: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
4010: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
4020: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
4030: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
4040: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
4050: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
4060: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
4070: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
4080: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4090: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
40a0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
40b0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
40c0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
40d0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
40e0: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
40f0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4100: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4110: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4120: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4130: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 67  * Return the reg
4140: 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70 32  ister of pOp->p2
4150: 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72 65   after first pre
4160: 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65 0a  paring it to be.
4170: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  ** overwritten w
4180: 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ith an integer v
4190: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
41a0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
41b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
41c0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65 6d  aseWithClear(Mem
41d0: 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69 74   *pOut){.  sqlit
41e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
41f0: 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  (pOut);.  pOut->
4200: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4210: 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a  .  return pOut;.
4220: 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f 75  }.static Mem *ou
4230: 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64 62  t2Prerelease(Vdb
4240: 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70 4f  e *p, VdbeOp *pO
4250: 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b  p){.  Mem *pOut;
4260: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
4270: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
4280: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
4290: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
42a0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
42b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
42c0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
42d0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
42e0: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
42f0: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 72 65  (pOut) ){.    re
4300: 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65  turn out2Prerele
4310: 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75  aseWithClear(pOu
4320: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
4330: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4340: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75  EM_Int;.    retu
4350: 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a  rn pOut;.  }.}..
4360: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
4370: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
4380: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
4390: 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  an..** This is t
43a0: 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74  he core of sqlit
43b0: 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a  e3_step().  .*/.
43c0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
43d0: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
4400: 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20  .){.  Op *aOp = 
4410: 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20  p->aOp;         
4420: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4430: 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20  Op */.  Op *pOp 
4440: 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  = aOp;          
4450: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
4460: 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64  eration */.#if d
4470: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
4480: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
4490: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
44a0: 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20  Op *pOrigOp;    
44b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
44c0: 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68  lue of pOp at th
44d0: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f  e top of the loo
44e0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  p */.#endif.#ifd
44f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4500: 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65    int nExtraDele
4510: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  te = 0;      /* 
4520: 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45  Verifies FORDELE
4530: 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  TE and AUXDELETE
4540: 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66   flags */.#endif
4550: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
4560: 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a  TE_OK;        /*
4570: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
4580: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
4590: 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20  b = p->db;      
45a0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
45b0: 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63   */.  u8 resetSc
45c0: 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b  hemaOnFault = 0;
45d0: 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61   /* Reset schema
45e0: 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
45f0: 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20  if positive */. 
4600: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
4610: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
4620: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
4630: 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ding */.  int iC
4640: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
4650: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4660: 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72  f last OP_Compar
4670: 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  e operation */. 
4680: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
4690: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
46a0: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
46b0: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
46c0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
46d0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
46e0: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
46f0: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4700: 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20  t = 0;/* Invoke 
4710: 78 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e  xProgress() when
4720: 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73   nVmStep reaches
4730: 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a   this */.#endif.
4740: 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d    Mem *aMem = p-
4750: 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20  >aMem;       /* 
4760: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20  Copy of p->aMem 
4770: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d  */.  Mem *pIn1 =
4780: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4790: 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65  /* 1st input ope
47a0: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
47b0: 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In2 = 0;        
47c0: 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75       /* 2nd inpu
47d0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
47e0: 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20  em *pIn3 = 0;   
47f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64            /* 3rd
4800: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4810: 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  /.  Mem *pOut = 
4820: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4830: 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64  * Output operand
4840: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4850: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4860: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4870: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4880: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69  P_Compare */.  i
4890: 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  64 lastRowid = d
48a0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f  b->lastRowid;  /
48b0: 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66  * Saved value of
48c0: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
48d0: 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66   ROWID */.#ifdef
48e0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
48f0: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
4900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
4910: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
4920: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4930: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
4940: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
4950: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
4960: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
4970: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
4980: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
4990: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
49a0: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
49b0: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
49c0: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
49d0: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
49e0: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
49f0: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
4a00: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
4a10: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4a20: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
4a30: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4a40: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
4a50: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4a60: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4a70: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4a80: 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30  E_OK || (p->rc&0
4a90: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
4aa0: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
4ab0: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
4ac0: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
4ad0: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4ae0: 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72  E_OK;.  p->iCurr
4af0: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
4b00: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
4b10: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
4b20: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
4b30: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
4b40: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
4b50: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
4b60: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
4b70: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
4b80: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
4b90: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4ba0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4bb0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4bc0: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
4bd0: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
4be0: 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d   u32 iPrior = p-
4bf0: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
4c00: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
4c10: 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  TEP];.    assert
4c20: 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72  ( 0 < db->nProgr
4c30: 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50  essOps );.    nP
4c40: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64  rogressLimit = d
4c50: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
4c60: 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e  - (iPrior % db->
4c70: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
4c80: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66   }.#endif.#ifdef
4c90: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4ca0: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
4cb0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
4cc0: 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26  ( p->pc==0.   &&
4cd0: 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26   (p->db->flags &
4ce0: 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73   (SQLITE_VdbeLis
4cf0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
4d00: 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54  EQP|SQLITE_VdbeT
4d10: 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20  race))!=0.  ){. 
4d20: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e     int i;.    in
4d30: 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20  t once = 1;.    
4d40: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d50: 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20  Sql(p);.    if( 
4d60: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4d70: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4d80: 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74  g ){.      print
4d90: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
4da0: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
4db0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
4dc0: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
4dd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4de0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
4df0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
4e00: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
4e10: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
4e20: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  & SQLITE_VdbeEQP
4e30: 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   ){.      for(i=
4e40: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4e50: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  ){.        if( a
4e60: 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[i].opcode==OP
4e70: 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20  _Explain ){.    
4e80: 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29        if( once )
4e90: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75   printf("VDBE Qu
4ea0: 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20  ery Plan:\n");. 
4eb0: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
4ec0: 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70  "%s\n", aOp[i].p
4ed0: 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  4.z);.          
4ee0: 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  once = 0;.      
4ef0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
4f00: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  }.    if( p->db-
4f10: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4f20: 56 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69  VdbeTrace )  pri
4f30: 6e 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a  ntf("VDBE Trace:
4f40: 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  \n");.  }.  sqli
4f50: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
4f60: 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66  oc();.#endif.  f
4f70: 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70  or(pOp=&aOp[p->p
4f80: 63 5d 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  c]; rc==SQLITE_O
4f90: 4b 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 61  K; pOp++){.    a
4fa0: 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20  ssert( pOp>=aOp 
4fb0: 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e  && pOp<&aOp[p->n
4fc0: 4f 70 5d 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Op]);.    if( db
4fd0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
4fe0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69   goto no_mem;.#i
4ff0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
5000: 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  E.    start = sq
5010: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
5020: 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65  endif.    nVmSte
5030: 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p++;.#ifdef SQLI
5040: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
5050: 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66  CANSTATUS.    if
5060: 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d  ( p->anExec ) p-
5070: 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f  >anExec[(int)(pO
5080: 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69  p-aOp)]++;.#endi
5090: 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  f..    /* Only a
50a0: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
50b0: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
50c0: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
50d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
50e0: 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
50f0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5100: 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
5110: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
5120: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e  ntOp(stdout, (in
5130: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70  t)(pOp - aOp), p
5140: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
5150: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
5160: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
5170: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
5180: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
5190: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
51a0: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
51b0: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
51c0: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
51d0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
51e0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
51f0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5200: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
5210: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5220: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
5230: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5240: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
5250: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
5260: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5270: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
5280: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
5290: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
52a0: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
52b0: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
52c0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 61  LITE_DEBUG.    a
52d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
52e0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
52f0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
5300: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
5310: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5320: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5330: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5340: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5350: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5360: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
5370: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5380: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5390: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
53a0: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
53b0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
53c0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
53d0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
53e0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p1]) );.      R
53f0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5400: 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p1, &aMem[pOp
5410: 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p1]);.    }.  
5420: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5430: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  ags & OPFLG_IN2)
5440: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5450: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5460: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5470: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
5480: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
5490: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
54a0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
54b0: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
54c0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
54d0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
54e0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
54f0: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5500: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5510: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5520: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5530: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5540: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
5550: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5560: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5570: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5580: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
5590: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
55a0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
55b0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
55c0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
55d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
55e0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
55f0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5600: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5610: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
5620: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ACE(pOp->p3, &aM
5630: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
5640: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
5650: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
5660: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
5670: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5680: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5690: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
56a0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
56b0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
56c0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
56d0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
56e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
56f0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5700: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
5710: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5720: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5730: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5740: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
5750: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5760: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5770: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5780: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ->p3]);.    }.#e
5790: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
57a0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
57b0: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
57c0: 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69  ROFILE).    pOri
57d0: 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69  gOp = pOp;.#endi
57e0: 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28  f.  .    switch(
57f0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
5800: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
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 0a  ***************.
5850: 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20  ** What follows 
5860: 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69  is a massive swi
5870: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68  tch statement wh
5880: 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d  ere each case im
5890: 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65  plements a.** se
58a0: 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69  parate instructi
58b0: 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  on in the virtua
58c0: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77  l machine.  If w
58d0: 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75  e follow the usu
58e0: 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f  al.** indentatio
58f0: 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65  n conventions, e
5900: 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20  ach case should 
5910: 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36  be indented by 6
5920: 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a   spaces.  But.**
5930: 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f   that is a lot o
5940: 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f  f wasted space o
5950: 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69  n the left margi
5960: 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20  n.  So the code 
5970: 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77  within.** the sw
5980: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5990: 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63  ill break with c
59a0: 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65  onvention and be
59b0: 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f   flush-left. Ano
59c0: 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d  ther.** big comm
59d0: 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20  ent (similar to 
59e0: 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d  this one) will m
59f0: 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e  ark the point in
5a00: 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a   the code where.
5a10: 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e  ** we transition
5a20: 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20   back to normal 
5a30: 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  indentation..**.
5a40: 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e  ** The formattin
5a50: 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69  g of each case i
5a60: 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68  s important.  Th
5a70: 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53  e makefile for S
5a80: 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74  QLite.** generat
5a90: 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22  es two C files "
5aa0: 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22  opcodes.h" and "
5ab0: 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63  opcodes.c" by sc
5ac0: 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66  anning this.** f
5ad0: 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ile looking for 
5ae0: 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e  lines that begin
5af0: 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22   with "case OP_"
5b00: 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68  .  The opcodes.h
5b10: 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62   files.** will b
5b20: 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64  e filled with #d
5b30: 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65  efines that give
5b40: 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20   unique integer 
5b50: 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a  values to each.*
5b60: 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65  * opcode and the
5b70: 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20   opcodes.c file 
5b80: 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61  is filled with a
5b90: 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e  n array of strin
5ba0: 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68  gs where.** each
5bb0: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73   string is the s
5bc0: 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72  ymbolic name for
5bd0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
5be0: 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74  ng opcode.  If t
5bf0: 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65  he.** case state
5c00: 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  ment is followed
5c10: 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66   by a comment of
5c20: 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61   the form "/# sa
5c30: 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a  me as ... #/".**
5c40: 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73   that comment is
5c50: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
5c60: 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  ne the particula
5c70: 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  r value of the o
5c80: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68  pcode..**.** Oth
5c90: 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74  er keywords in t
5ca0: 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20  he comment that 
5cb0: 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73  follows each cas
5cc0: 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  e are used to.**
5cd0: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f   construct the O
5ce0: 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52  PFLG_INITIALIZER
5cf0: 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74   value that init
5d00: 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72  ializes opcodePr
5d10: 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79  operty[]..** Key
5d20: 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69  words include: i
5d30: 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75  n1, in2, in3, ou
5d40: 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a  t2, out3.  See.*
5d50: 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e  * the mkopcodeh.
5d60: 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61  awk script for a
5d70: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
5d80: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63  ation..**.** Doc
5d90: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
5da0: 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73   VDBE opcodes is
5db0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63   generated by sc
5dc0: 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  anning this file
5dd0: 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66  .** for lines of
5de0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f   that contain "O
5df0: 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c  pcode:".  That l
5e00: 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ine and all subs
5e10: 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e  equent.** commen
5e20: 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64  t lines are used
5e30: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
5e40: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  on of the opcode
5e50: 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74  .html documentat
5e60: 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a  ion.** file..**.
5e70: 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a  ** SUMMARY:.**.*
5e80: 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67  *     Formatting
5e90: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
5ea0: 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63   scripts that sc
5eb0: 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a  an this file..**
5ec0: 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69       Do not devi
5ed0: 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72  ate from the for
5ee0: 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75  matting style cu
5ef0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a  rrently in use..
5f00: 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  **.*************
5f10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f50: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  /../* Opcode:  G
5f60: 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  oto * P2 * * *.*
5f70: 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74  *.** An uncondit
5f80: 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64  ional jump to ad
5f90: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65  dress P2..** The
5fa0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
5fb0: 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20  n executed will 
5fc0: 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61  be .** the one a
5fd0: 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20  t index P2 from 
5fe0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
5ff0: 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e  .** the program.
6000: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61  .**.** The P1 pa
6010: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61  rameter is not a
6020: 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20  ctually used by 
6030: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f  this opcode.  Ho
6040: 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20  wever, it.** is 
6050: 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f  sometimes set to
6060: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20   1 instead of 0 
6070: 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  as a hint to the
6080: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
6090: 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  ell.** that this
60a0: 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74   Goto is the bot
60b0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e  tom of a loop an
60c0: 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73  d that the lines
60d0: 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a   from P2 down.**
60e0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
60f0: 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69  line should be i
6100: 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c  ndented for EXPL
6110: 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  AIN output..*/.c
6120: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6130: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6140: 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32  mp */.jump_to_p2
6150: 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
6160: 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20  nterrupt:.  pOp 
6170: 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d  = &aOp[pOp->p2 -
6180: 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64   1];..  /* Opcod
6190: 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  es that are used
61a0: 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   as the bottom o
61b0: 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78  f a loop (OP_Nex
61c0: 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a  t, OP_Prev,.  **
61d0: 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f   OP_VNext, OP_Ro
61e0: 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f  wSetNext, or OP_
61f0: 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20  SorterNext) all 
6200: 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20  jump here upon. 
6210: 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20   ** completion. 
6220: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
6230: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
6240: 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  pt() has been ca
6250: 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20  lled.  ** or if 
6260: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
6270: 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62  lback needs to b
6280: 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a  e invoked. .  **
6290: 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20  .  ** This code 
62a0: 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72 65  uses unstructure
62b0: 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65  d "goto" stateme
62c0: 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74  nts and does not
62d0: 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a   look clean..  *
62e0: 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f  * But that is no
62f0: 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20  t due to sloppy 
6300: 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54  coding habits. T
6310: 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74 74  he code is writt
6320: 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79  en this.  ** way
6330: 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65   for performance
6340: 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e  , to avoid havin
6350: 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74  g to run the int
6360: 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72  errupt and progr
6370: 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ess.  ** checks 
6380: 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e  on every opcode.
6390: 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c    This helps sql
63a0: 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72  ite3_step() to r
63b0: 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20  un about 1.5%.  
63c0: 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72 64  ** faster accord
63d0: 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64  ing to "valgrind
63e0: 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69   --tool=cachegri
63f0: 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72  nd" */.check_for
6400: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66  _interrupt:.  if
6410: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
6420: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
6430: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
6440: 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rupt;.#ifndef SQ
6450: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
6460: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
6470: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
6480: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
6490: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
64a0: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
64b0: 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20   number.  ** of 
64c0: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
64d0: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
64e0: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
64f0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a  nvocation of.  *
6500: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  * sqlite3VdbeExe
6510: 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73  c() or since las
6520: 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72  t time the progr
6530: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73  ess callback was
6540: 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49   called)..  ** I
6550: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
6560: 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20  allback returns 
6570: 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74  non-zero, exit t
6580: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
6590: 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72  ne with.  ** a r
65a0: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
65b0: 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20  E_ABORT..  */.  
65c0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
65d0: 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e  s!=0 && nVmStep>
65e0: 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20  =nProgressLimit 
65f0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
6600: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21  b->nProgressOps!
6610: 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  =0 );.    nProgr
6620: 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74  essLimit = nVmSt
6630: 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65  ep + db->nProgre
6640: 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70  ssOps - (nVmStep
6650: 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70  %db->nProgressOp
6660: 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  s);.    if( db->
6670: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
6680: 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20  rogressArg) ){. 
6690: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
66a0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
66b0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
66c0: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20  r_halt;.    }.  
66d0: 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72  }.#endif.  .  br
66e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
66f0: 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20  e:  Gosub P1 P2 
6700: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
6710: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64  e the current ad
6720: 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73  dress onto regis
6730: 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68  ter P1.** and th
6740: 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  en jump to addre
6750: 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ss P2..*/.case O
6760: 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20  P_Gosub: {      
6770: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
6780: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6790: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
67a0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
67b0: 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20  rsor) );.  pIn1 
67c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
67d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
67e0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
67f0: 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75  ==0 );.  memAbou
6800: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
6810: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  1);.  pIn1->flag
6820: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
6830: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
6840: 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47  (pOp-aOp);.  REG
6850: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6860: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f  >p1, pIn1);..  /
6870: 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72  * Most jump oper
6880: 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f  ations do a goto
6890: 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e   to this spot in
68a0: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
68b0: 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f  .  ** the pOp po
68c0: 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74  inter. */.jump_t
68d0: 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61  o_p2:.  pOp = &a
68e0: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
68f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6900: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6910: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6920: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
6930: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
6940: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
6950: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6960: 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75   After.** the ju
6970: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
6980: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
6990: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
69a0: 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20  turn: {         
69b0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
69c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
69d0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
69e0: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
69f0: 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26  Int );.  pOp = &
6a00: 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a  aOp[pIn1->u.i];.
6a10: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6a20: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
6a30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6a40: 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74  code: InitCorout
6a50: 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ine P1 P2 P3 * *
6a60: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65  .**.** Set up re
6a70: 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61  gister P1 so tha
6a80: 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20  t it will Yield 
6a90: 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  to the coroutine
6aa0: 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61  .** located at a
6ab0: 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  ddress P3..**.**
6ac0: 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74   If P2!=0 then t
6ad0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
6ae0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65  lementation imme
6af0: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a  diately follows.
6b00: 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
6b10: 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68   So jump over th
6b20: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6b30: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a  ementation to.**
6b40: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a   address P2..**.
6b50: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64  ** See also: End
6b60: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6b70: 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69  e OP_InitCorouti
6b80: 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d  ne: {     /* jum
6b90: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
6ba0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70  Op->p1>0 &&  pOp
6bb0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
6bc0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6bd0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
6be0: 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  =0 && pOp->p2<p-
6bf0: 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74  >nOp );.  assert
6c00: 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20  ( pOp->p3>=0 && 
6c10: 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29  pOp->p3<p->nOp )
6c20: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
6c30: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6c40: 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e  ert( !VdbeMemDyn
6c50: 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20  amic(pOut) );.  
6c60: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d  pOut->u.i = pOp-
6c70: 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d  >p3 - 1;.  pOut-
6c80: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6c90: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
6ca0: 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
6cb0: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
6cc0: 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f  * Opcode:  EndCo
6cd0: 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a  routine P1 * * *
6ce0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73   *.**.** The ins
6cf0: 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20  truction at the 
6d00: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
6d10: 74 65 72 20 50 31 20 69 73 20 61 20 59 69 65 6c  ter P1 is a Yiel
6d20: 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  d..** Jump to th
6d30: 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f  e P2 parameter o
6d40: 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a  f that Yield..**
6d50: 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c   After the jump,
6d60: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
6d70: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
6d80: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
6d90: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f  InitCoroutine.*/
6da0: 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f  .case OP_EndCoro
6db0: 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20  utine: {        
6dc0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56     /* in1 */.  V
6dd0: 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a  dbeOp *pCaller;.
6de0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6df0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6e00: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d  t( pIn1->flags==
6e10: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
6e20: 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d  ert( pIn1->u.i>=
6e30: 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70  0 && pIn1->u.i<p
6e40: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c  ->nOp );.  pCall
6e50: 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e  er = &aOp[pIn1->
6e60: 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  u.i];.  assert( 
6e70: 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d  pCaller->opcode=
6e80: 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61  =OP_Yield );.  a
6e90: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
6ea0: 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72  p2>=0 && pCaller
6eb0: 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
6ec0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c   pOp = &aOp[pCal
6ed0: 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  ler->p2 - 1];.  
6ee0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6ef0: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
6f00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6f10: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32  de:  Yield P1 P2
6f20: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61   * * *.**.** Swa
6f30: 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  p the program co
6f40: 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76  unter with the v
6f50: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6f60: 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61   P1.  This.** ha
6f70: 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20  s the effect of 
6f80: 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f  yielding to a co
6f90: 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  routine..**.** I
6fa0: 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  f the coroutine 
6fb0: 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64  that is launched
6fc0: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
6fd0: 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a  tion ends with.*
6fe0: 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72  * Yield or Retur
6ff0: 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20  n then continue 
7000: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
7010: 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
7020: 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  .** the coroutin
7030: 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68  e launched by th
7040: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  is instruction e
7050: 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43  nds with.** EndC
7060: 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a  oroutine, then j
7070: 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72  ump to P2 rather
7080: 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67   than continuing
7090: 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78   with the.** nex
70a0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
70b0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
70c0: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
70d0: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
70f0: 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e  n1, jump */.  in
7100: 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31  t pcDest;.  pIn1
7110: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
7120: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
7130: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
7140: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
7150: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
7160: 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74  .  pcDest = (int
7170: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
7180: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
7190: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45  pOp - aOp);.  RE
71a0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
71b0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
71c0: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74  Op = &aOp[pcDest
71d0: 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ];.  break;.}../
71e0: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49  * Opcode:  HaltI
71f0: 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20  fNull  P1 P2 P3 
7200: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
7210: 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c  s:  if r[P3]=nul
7220: 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65  l halt.**.** Che
7230: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
7240: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
7250: 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   it is NULL then
7260: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
7270: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
7280: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
7290: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
72a0: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
72b0: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
72c0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
72d0: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
72e0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
72f0: 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35  no-op..** The P5
7300: 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c   parameter shoul
7310: 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  d be 1..*/.case 
7320: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
7330: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
7340: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
7350: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
7360: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
7370: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65  M_Null)==0 ) bre
7380: 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
7390: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61  rough into OP_Ha
73a0: 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  lt */.}../* Opco
73b0: 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20  de:  Halt P1 P2 
73c0: 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  * P4 P5.**.** Ex
73d0: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
73e0: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
73f0: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
7400: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
7410: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
7420: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
7430: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
7440: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
7450: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
7460: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
7470: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
7480: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
7490: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
74a0: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
74b0: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
74c0: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
74d0: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
74e0: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
74f0: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
7500: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
7510: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
7520: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
7530: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
7540: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
7550: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
7560: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
7570: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
7580: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
7590: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
75a0: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
75b0: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
75c0: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
75d0: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
75e0: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
75f0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
7600: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
7610: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
7620: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
7630: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
7640: 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75  .** P5 is a valu
7650: 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  e between 0 and 
7660: 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68  4, inclusive, th
7670: 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  at modifies the 
7680: 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  P4 string..**.**
7690: 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e      0:  (no chan
76a0: 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f  ge).**    1:  NO
76b0: 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74  T NULL contraint
76c0: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
76d0: 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e    2:  UNIQUE con
76e0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
76f0: 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45  P4.**    3:  CHE
7700: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  CK constraint fa
7710: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34  iled: P4.**    4
7720: 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  :  FOREIGN KEY c
7730: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7740: 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  : P4.**.** If P5
7750: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
7760: 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65   P4 is NULL, the
7770: 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74  n everything aft
7780: 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a  er the ":" is.**
7790: 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   omitted..**.** 
77a0: 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c  There is an impl
77b0: 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22  ied "Halt 0 0 0"
77c0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73   instruction ins
77d0: 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
77e0: 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72  y end of.** ever
77f0: 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61  y program.  So a
7800: 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c   jump past the l
7810: 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ast instruction 
7820: 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a  of the program.*
7830: 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  * is the same as
7840: 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e   executing Halt.
7850: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
7860: 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
7870: 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74   *zType;.  const
7880: 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a   char *zLogFmt;.
7890: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
78a0: 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a  ame;.  int pcx;.
78b0: 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70  .  pcx = (int)(p
78c0: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28  Op - aOp);.  if(
78d0: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
78e0: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
78f0: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
7900: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
7910: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
7920: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
7930: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61  ame. */.    pFra
7940: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
7950: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
7960: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
7970: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
7980: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7990: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
79a0: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
79b0: 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64   pcx = sqlite3Vd
79c0: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
79d0: 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74  Frame);.    last
79e0: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
79f0: 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70  Rowid;.    if( p
7a00: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
7a10: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
7a20: 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73  struction pcx is
7a30: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
7a40: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
7a50: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
7a60: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
7a70: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
7a80: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
7a90: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
7aa0: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
7ab0: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
7ac0: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
7ad0: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
7ae0: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
7af0: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
7b00: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
7b10: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
7b20: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
7b30: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
7b40: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
7b50: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
7b60: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
7b70: 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63   pcx = p->aOp[pc
7b80: 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  x].p2-1;.    }. 
7b90: 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b     aOp = p->aOp;
7ba0: 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61  .    aMem = p->a
7bb0: 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26  Mem;.    pOp = &
7bc0: 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72  aOp[pcx];.    br
7bd0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63  eak;.  }.  p->rc
7be0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
7bf0: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
7c00: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
7c10: 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 69 66 28  >pc = pcx;.  if(
7c20: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66   p->rc ){.    if
7c30: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
7c40: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
7c50: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54  char * const azT
7c60: 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e  ype[] = { "NOT N
7c70: 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20  ULL", "UNIQUE", 
7c80: 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20  "CHECK",.       
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b        "FOREIGN K
7cc0: 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73  EY" };.      ass
7cd0: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20  ert( pOp->p5>=1 
7ce0: 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b  && pOp->p5<=4 );
7cf0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7d00: 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
7d10: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7d20: 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20  Op->p5==2 );.   
7d30: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7d40: 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20  ->p5==3 );.     
7d50: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7d60: 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a  p5==4 );.      z
7d70: 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f  Type = azType[pO
7d80: 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65  p->p5-1];.    }e
7d90: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65  lse{.      zType
7da0: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
7db0: 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30  assert( zType!=0
7dc0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30   || pOp->p4.z!=0
7dd0: 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20   );.    zLogFmt 
7de0: 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  = "abort at %d i
7df0: 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20  n [%s]: %s";.   
7e00: 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f   if( zType && pO
7e10: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7e20: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
7e30: 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61  r(p, "%s constra
7e40: 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c  int failed: %s",
7e50: 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e   zType, pOp->p4.
7e60: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  z);.    }else if
7e70: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
7e80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7e90: 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70  Error(p, "%s", p
7ea0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
7eb0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
7ec0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
7ed0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
7ee0: 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a  ailed", zType);.
7ef0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
7f00: 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a  3_log(pOp->p1, z
7f10: 4c 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d 3e  LogFmt, pcx, p->
7f20: 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
7f30: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
7f40: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
7f50: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
7f60: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
7f70: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f80: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
7f90: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
7fa0: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
7fb0: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
7fc0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
7fd0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
7fe0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7ff0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
8000: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
8010: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8020: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8030: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
8040: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
8050: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
8060: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
8070: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
8080: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
8090: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
80a0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
80b0: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
80c0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
80d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
80e0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
80f0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
8100: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
8110: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8120: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
8130: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
8140: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8150: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8160: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8170: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
8180: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8190: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
81a0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
81b0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
81c0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
81d0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
81e0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
81f0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
8200: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
8210: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8220: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
8230: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8240: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8250: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8260: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8270: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
8280: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
8290: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
82a0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
82b0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
82c0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
82d0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
82e0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
82f0: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
8300: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8310: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
8320: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
8330: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8340: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8350: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8360: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
8370: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8380: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20   TK_FLOAT, out2 
8390: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
83a0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
83b0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
83c0: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
83d0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
83e0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
83f0: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
8400: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
8410: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
8420: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
8430: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
8440: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8450: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8460: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8470: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8480: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8490: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
84a0: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
84b0: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
84c0: 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74  opcode before it
84d0: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
84e0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
84f0: 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73    During.** this
8500: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c   transformation,
8510: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73   the length of s
8520: 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70  tring P4 is comp
8530: 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a  uted and stored.
8540: 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72  ** as the P1 par
8550: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  ameter..*/.case 
8560: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
8570: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8580: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
8590: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
85a0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
85b0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
85c0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
85d0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
85e0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
85f0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
8600: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
8610: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
8620: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
8630: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
8640: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
8650: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8660: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8670: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
8680: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8690: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
86a0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54  if( rc==SQLITE_T
86b0: 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f  OOBIG ) goto too
86c0: 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51  _big;.    if( SQ
86d0: 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33  LITE_OK!=sqlite3
86e0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
86f0: 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
8700: 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  g) ) goto no_mem
8710: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
8720: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26  ut->szMalloc>0 &
8730: 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d  & pOut->zMalloc=
8740: 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20  =pOut->z );.    
8750: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
8760: 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20  ynamic(pOut)==0 
8770: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d  );.    pOut->szM
8780: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
8790: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
87a0: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66  M_Static;.    if
87b0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
87c0: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
87d0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
87e0: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
87f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
8800: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
8810: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
8820: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
8830: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
8840: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
8850: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
8860: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
8870: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
8880: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8890: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
88a0: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
88b0: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
88c0: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
88d0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
88e0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
88f0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8900: 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a  ='P4' (len=P1).*
8910: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
8920: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
8930: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
8940: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
8950: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
8960: 20 50 35 21 3d 30 20 61 6e 64 20 74 68 65 20 63   P5!=0 and the c
8970: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
8980: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
8990: 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
89a0: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
89b0: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
89c0: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
89d0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
89e0: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
89f0: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
8a00: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
8a10: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
8a20: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
8a30: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
8a40: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
8a50: 20 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f 0a 63   been CAST..*/.c
8a60: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
8a70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8a80: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
8a90: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
8aa0: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8ab0: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8ac0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8ad0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
8ae0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
8af0: 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34  Out->z = pOp->p4
8b00: 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  .z;.  pOut->n = 
8b10: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d  pOp->p1;.  pOut-
8b20: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
8b30: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
8b40: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69  OBSIZE(pOut);.#i
8b50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b  fndef SQLITE_LIK
8b60: 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42  E_DOESNT_MATCH_B
8b70: 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e  LOBS.  if( pOp->
8b80: 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p5 ){.    assert
8b90: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
8ba0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
8bb0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
8bc0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
8bd0: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
8be0: 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
8bf0: 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
8c00: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
8c10: 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 29 20  if( pIn3->u.i ) 
8c20: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
8c30: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69  M_Blob|MEM_Stati
8c40: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  c|MEM_Term;.  }.
8c50: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
8c60: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
8c70: 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ll P1 P2 P3 * *.
8c80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
8c90: 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  P2..P3]=NULL.**.
8ca0: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
8cb0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
8cc0: 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65  2.  If P3 greate
8cd0: 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20  r than P2, then 
8ce0: 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55  also write.** NU
8cf0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8d00: 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65   P3 and every re
8d10: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
8d20: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
8d30: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
8d40: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
8d50: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
8d60: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
8d70: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
8d80: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   NULL..**.** If 
8d90: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20  the P1 value is 
8da0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
8db0: 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f  lso set the MEM_
8dc0: 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20  Cleared flag so 
8dd0: 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c  that.** NULL val
8de0: 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d  ues will not com
8df0: 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20  pare equal even 
8e00: 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  if SQLITE_NULLEQ
8e10: 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50   is set on.** OP
8e20: 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f  _Ne or OP_Eq..*/
8e30: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
8e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8e50: 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  t2 */.  int cnt;
8e60: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
8e70: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8e80: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8e90: 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70  ;.  cnt = pOp->p
8ea0: 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  3-pOp->p2;.  ass
8eb0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
8ec0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
8ed0: 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  r) );.  pOut->fl
8ee0: 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d  ags = nullFlag =
8ef0: 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f   pOp->p1 ? (MEM_
8f00: 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64  Null|MEM_Cleared
8f10: 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  ) : MEM_Null;.  
8f20: 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a  while( cnt>0 ){.
8f30: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
8f40: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
8f50: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
8f60: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8f70: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
8f80: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
8f90: 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d  llFlag;.    cnt-
8fa0: 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  -;.  }.  break;.
8fb0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
8fc0: 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20  ftNull P1 * * * 
8fd0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
8fe0: 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  r[P1]=NULL.**.**
8ff0: 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31   Set register P1
9000: 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c   to have the val
9010: 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20  ue NULL as seen 
9020: 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  by the OP_MakeRe
9030: 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74  cord.** instruct
9040: 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  ion, but do not 
9050: 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20  free any string 
9060: 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61  or blob memory a
9070: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a  ssociated with.*
9080: 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20  * the register, 
9090: 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76  so that if the v
90a0: 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e  alue was a strin
90b0: 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77  g or blob that w
90c0: 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
90d0: 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50   copied using OP
90e0: 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69  _SCopy, the copi
90f0: 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  es will continue
9100: 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f   to be valid..*/
9110: 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c  .case OP_SoftNul
9120: 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  l: {.  assert( p
9130: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
9140: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
9150: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
9160: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9170: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p1];.  pOut->fl
9180: 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61  ags = (pOut->fla
9190: 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45  gs|MEM_Null)&~ME
91a0: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
91b0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
91c0: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
91d0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
91e0: 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e  s: r[P2]=P4 (len
91f0: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  =P1).**.** P4 po
9200: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
9210: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
9220: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
9230: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
9240: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
9250: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
9260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
9270: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
9280: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
9290: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
92a0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
92b0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
92c0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
92d0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
92e0: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
92f0: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
9300: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9310: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9320: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9330: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9340: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
9350: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9360: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
9370: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
9380: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
9390: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
93a0: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
93b0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
93c0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
93d0: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
93e0: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
93f0: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
9400: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
9410: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
9420: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
9430: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
9440: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
9450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
9460: 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  t2 */.  Mem *pVa
9470: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
9480: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
9490: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
94a0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
94b0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
94c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
94d0: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
94e0: 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72  ->p4.z==p->azVar
94f0: 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20  [pOp->p1-1] );. 
9500: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
9510: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
9520: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9530: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
9540: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
9550: 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  big;.  }.  pOut 
9560: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9570: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69  (p, pOp);.  sqli
9580: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
9590: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72  wCopy(pOut, pVar
95a0: 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
95b0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
95c0: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
95d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
95e0: 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33  e: Move P1 P2 P3
95f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9600: 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31  :  r[P2@P3]=r[P1
9610: 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20  @P3].**.** Move 
9620: 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e  the P3 values in
9630: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
9640: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
9650: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
9660: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
9670: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ters P1..P1+P3-1
9680: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
9690: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
96a0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
96b0: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
96c0: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
96d0: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
96e0: 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20  to overlap.  It 
96f0: 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66  is an error.** f
9700: 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73  or P3 to be less
9710: 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65   than 1..*/.case
9720: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e   OP_Move: {.  in
9730: 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  t n;           /
9740: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
9750: 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f  sters left to co
9760: 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  py */.  int p1; 
9770: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
9780: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f  ster to copy fro
9790: 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  m */.  int p2;  
97a0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
97b0: 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a  ter to copy to *
97c0: 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  /..  n = pOp->p3
97d0: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
97e0: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
97f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
9800: 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20  && p1>0 && p2>0 
9810: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b  );.  assert( p1+
9820: 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70  n<=p2 || p2+n<=p
9830: 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  1 );..  pIn1 = &
9840: 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74  aMem[p1];.  pOut
9850: 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
9860: 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
9870: 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pOut<=&aMem[(p->
9880: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
9890: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
98a0: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
98b0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
98c0: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
98d0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
98e0: 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  1) );.    memAbo
98f0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
9900: 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ut);.    sqlite3
9910: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
9920: 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20  , pIn1);.#ifdef 
9930: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
9940: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9950: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
9960: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
9970: 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20  From<pOut ){.   
9980: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
9990: 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d  rom += pOp->p2 -
99a0: 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69   p1;.    }.#endi
99b0: 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  f.    Deephemera
99c0: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  lize(pOut);.    
99d0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
99e0: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
99f0: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
9a00: 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d  ++;.  }while( --
9a10: 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
9a20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
9a30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9a40: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
9a50: 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d  P3+1]=r[P1@P3+1]
9a60: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
9a70: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  py of registers 
9a80: 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72  P1..P1+P3 into r
9a90: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9aa0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P3..**.** This i
9ab0: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9ac0: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
9ad0: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
9ae0: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
9af0: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
9b00: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
9b10: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
9b20: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
9b30: 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20  P_Copy: {.  int 
9b40: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
9b50: 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  3;.  pIn1 = &aMe
9b60: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9b70: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9b80: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
9b90: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77  Out!=pIn1 );.  w
9ba0: 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73  hile( 1 ){.    s
9bb0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9bc0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9bd0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
9be0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
9bf0: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
9c00: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c10: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
9c20: 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  rom = 0;.#endif.
9c30: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9c40: 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  CE(pOp->p2+pOp->
9c50: 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p3-n, pOut);.   
9c60: 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20   if( (n--)==0 ) 
9c70: 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b  break;.    pOut+
9c80: 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  +;.    pIn1++;. 
9c90: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
9ca0: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
9cb0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
9cc0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
9cd0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  [P1].**.** Make 
9ce0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
9cf0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
9d00: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
9d10: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9d20: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
9d30: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
9d40: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
9d50: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
9d60: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
9d70: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
9d80: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
9d90: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
9da0: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
9db0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
9dc0: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
9dd0: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
9de0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9df0: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
9e00: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
9e10: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
9e20: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
9e30: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
9e40: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
9e50: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
9e60: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
9e70: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
9e80: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
9e90: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
9ea0: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
9eb0: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
9ed0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
9ee0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9ef0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9f00: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
9f10: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
9f20: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
9f30: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
9f40: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
9f50: 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  em);.#ifdef SQLI
9f60: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
9f70: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d  Out->pScopyFrom=
9f80: 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70  =0 ) pOut->pScop
9f90: 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65  yFrom = pIn1;.#e
9fa0: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
9fb0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43  ./* Opcode: IntC
9fc0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
9fd0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9fe0: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  2]=r[P1].**.** T
9ff0: 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65  ransfer the inte
a000: 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69  ger value held i
a010: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
a020: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
a030: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e  **.** This is an
a040: 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69   optimized versi
a050: 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74  on of SCopy that
a060: 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20   works only for 
a070: 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65  integer.** value
a080: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  s..*/.case OP_In
a090: 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  tCopy: {        
a0a0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
a0b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
a0c0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
a0d0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
a0e0: 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
a0f0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a100: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
a110: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
a120: 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e  4(pOut, pIn1->u.
a130: 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
a140: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
a150: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
a160: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f  .** Synopsis:  o
a170: 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a  utput=r[P1@P2].*
a180: 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
a190: 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31  rs P1 through P1
a1a0: 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20  +P2-1 contain a 
a1b0: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a  single row of.**
a1c0: 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f   results. This o
a1d0: 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65  pcode causes the
a1e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
a1f0: 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74  call to terminat
a200: 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c  e.** with an SQL
a210: 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63  ITE_ROW return c
a220: 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20  ode and it sets 
a230: 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  up the sqlite3_s
a240: 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  tmt.** structure
a250: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65   to provide acce
a260: 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e  ss to the r(P1).
a270: 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75  .r(P1+P2-1) valu
a280: 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  es as.** the res
a290: 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65  ult row..*/.case
a2a0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b   OP_ResultRow: {
a2b0: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
a2c0: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
a2d0: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
a2e0: 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73  pOp->p2 );.  ass
a2f0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
a300: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
a310: 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  >p1+pOp->p2<=(p-
a320: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
a330: 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20  )+1 );..#ifndef 
a340: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
a350: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
a360: 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72  /* Run the progr
a370: 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74  ess counter just
a380: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
a390: 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  g..  */.  if( db
a3a0: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20  ->xProgress!=0. 
a3b0: 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50    && nVmStep>=nP
a3c0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20  rogressLimit.   
a3d0: 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  && db->xProgress
a3e0: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
a3f0: 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72  g)!=0.  ){.    r
a400: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
a410: 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76  RUPT;.    goto v
a420: 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
a430: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
a440: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
a450: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
a460: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
a470: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
a480: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
a490: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a4a0: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
a4b0: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
a4c0: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
a4d0: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
a4e0: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
a4f0: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
a500: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
a510: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
a520: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
a530: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
a540: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
a550: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a560: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
a570: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
a580: 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  al );.    break;
a590: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
a5a0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
a5b0: 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ws flag is set i
a5c0: 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20  n sqlite3.flags 
a5d0: 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  mask, then .  **
a5e0: 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   DML statements 
a5f0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
a600: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  de to return the
a610: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
a620: 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74  .  ** modified t
a630: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
a640: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
a650: 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a   that a VM that.
a660: 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61    ** opens a sta
a670: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a680: 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68  on may invoke th
a690: 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a  is opcode..  **.
a6a0: 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69    ** In case thi
a6b0: 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74  s is such a stat
a6c0: 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79  ement, close any
a6d0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a6e0: 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e  action.  ** open
a6f0: 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65  ed by this VM be
a700: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63  fore returning c
a710: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73  ontrol to the us
a720: 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20  er. This is to. 
a730: 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20   ** ensure that 
a740: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
a750: 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79  ctions are alway
a760: 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76  s nested, not ov
a770: 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20  erlapping..  ** 
a780: 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74  If the open stat
a790: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
a7a0: 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20  n is not closed 
a7b0: 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75  here, then the u
a7c0: 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65  ser.  ** may ste
a7d0: 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61  p another VM tha
a7e0: 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20  t opens its own 
a7f0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a800: 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a  ction. This.  **
a810: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65   may lead to ove
a820: 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65  rlapping stateme
a830: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  nt transactions.
a840: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
a850: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a860: 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20  tion is never a 
a870: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61  top-level transa
a880: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20  ction.  Hence.  
a890: 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ** the RELEASE c
a8a0: 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65  all below can ne
a8b0: 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20  ver fail..  */. 
a8c0: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
a8d0: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
a8e0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a8f0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20  untRows );.  rc 
a900: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
a910: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
a920: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
a930: 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
a940: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b  c!=SQLITE_OK) ){
a950: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
a960: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
a970: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
a980: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
a990: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
a9a0: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
a9b0: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
a9c0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
a9d0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
a9e0: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
a9f0: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
aa00: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
aa10: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
aa20: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
aa30: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
aa40: 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66  .  ** a side eff
aa50: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
aa60: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
aa70: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
aa80: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
aa90: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
aaa0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
aab0: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
aac0: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
aad0: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
aae0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
aaf0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
ab00: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
ab10: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
ab20: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
ab30: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
ab40: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
ab50: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
ab60: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
ab70: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
ab80: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
ab90: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
aba0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
abb0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
abc0: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
abd0: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
abe0: 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
abf0: 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a  pOp - aOp) + 1;.
ac00: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
ac10: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
ac20: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
ac30: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
ac40: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
ac50: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
ac60: 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P1].**.** Ad
ac70: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
ac80: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
ac90: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
aca0: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
acb0: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
acc0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
acd0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ace0: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
acf0: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
ad00: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
ad10: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
ad20: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
ad30: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
ad40: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
ad50: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
ad60: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
ad70: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
ad80: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
ad90: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
ada0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
adb0: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
adc0: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
add0: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
ade0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
adf0: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
ae00: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
ae10: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
ae20: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
ae30: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
ae40: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
ae50: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
ae60: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
ae70: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
ae80: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
ae90: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
aea0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
aeb0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
aec0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
aed0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
aee0: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
aef0: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
af00: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
af10: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
af20: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
af30: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
af40: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
af50: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
af60: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
af70: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
af80: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
af90: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
afa0: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
afb0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28  o_big;.  }.  if(
afc0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
afd0: 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
afe0: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
aff0: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
b000: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65  no_mem;.  }.  Me
b010: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b020: 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69  t, MEM_Str);.  i
b030: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
b040: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
b050: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
b060: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
b070: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
b080: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
b090: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
b0a0: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20  t->z[nByte]=0;. 
b0b0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
b0c0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
b0d0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
b0e0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
b0f0: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
b100: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
b110: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
b120: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
b130: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b140: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
b150: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b160: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  is:  r[P3]=r[P1]
b170: 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P2].**.** Add
b180: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b190: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
b1a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b1b0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b1c0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b1d0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b1e0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b1f0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b200: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b210: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
b220: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
b230: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b240: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32  r[P3]=r[P1]*r[P2
b250: 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  ].**.**.** Multi
b260: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
b270: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
b280: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b290: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
b2a0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b2b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b2c0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b2d0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b2e0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b2f0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
b300: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
b310: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b320: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  :  r[P3]=r[P2]-r
b330: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
b340: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
b350: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
b360: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
b370: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b380: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b390: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b3a0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b3b0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b3c0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b3d0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b3e0: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
b3f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b400: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72  :  r[P3]=r[P2]/r
b410: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64  [P1].**.** Divid
b420: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
b430: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
b440: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b450: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b460: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b470: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
b480: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
b490: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
b4a0: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
b4b0: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
b4c0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
b4d0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
b4e0: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
b4f0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b500: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
b510: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
b520: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b530: 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31  r[P3]=r[P2]%r[P1
b540: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ].**.** Compute 
b550: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
b560: 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69  ter integer regi
b570: 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64  ster P2 is divid
b580: 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74  ed by .** regist
b590: 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20  er P1 and store 
b5a0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b5b0: 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49  gister P3. .** I
b5c0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
b5d0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b5e0: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
b5f0: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
b600: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
b610: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b620: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b630: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b650: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
b660: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b670: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
b680: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
b690: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
b6a0: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
b6b0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
b6c0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
b6d0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b6e0: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
b6f0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b700: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
b710: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b720: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
b730: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b740: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
b750: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
b760: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
b770: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
b780: 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e  t3 */.  char bIn
b790: 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74  tint;   /* Start
b7a0: 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e  ed out as two in
b7b0: 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  teger operands *
b7c0: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
b7d0: 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20      /* Combined 
b7e0: 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d  MEM_* flags from
b7f0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a   both inputs */.
b800: 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20    u16 type1;    
b810: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
b820: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
b830: 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32  d */.  u16 type2
b840: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
b850: 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20  c type of right 
b860: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
b870: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
b880: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
b890: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
b8a0: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
b8b0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
b8c0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b8d0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
b8e0: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
b8f0: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
b900: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
b910: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
b920: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
b930: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
b940: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b950: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31  Op->p1];.  type1
b960: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
b970: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
b980: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b990: 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63   type2 = numeric
b9a0: 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f  Type(pIn2);.  pO
b9b0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b9c0: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
b9d0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
b9e0: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
b9f0: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
ba00: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
ba10: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
ba20: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74  s_null;.  if( (t
ba30: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
ba40: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
ba50: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
ba60: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
ba70: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
ba80: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
ba90: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
baa0: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
bab0: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
bac0: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
bad0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bae0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
baf0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
bb00: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
bb10: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
bb20: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
bb30: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bb40: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bb50: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
bb60: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
bb70: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
bb80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bb90: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
bba0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bbb0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bbc0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bbd0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bbe0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
bbf0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
bc00: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
bc10: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
bc20: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
bc30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
bc40: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
bc50: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
bc60: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bc70: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
bc80: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
bc90: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
bca0: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
bcb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bcc0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
bcd0: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
bce0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bcf0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
bd00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74   }else{.    bInt
bd10: 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68  int = 0;.fp_math
bd20: 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74  :.    rA = sqlit
bd30: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
bd40: 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20  pIn1);.    rB = 
bd50: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
bd60: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
bd70: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
bd80: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
bd90: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
bda0: 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20    rB += rA;     
bdb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bdc0: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
bdd0: 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20      rB -= rA;   
bde0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bdf0: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
be00: 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20  y:    rB *= rA; 
be10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
be20: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
be30: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e: {.        /* 
be40: 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73  (double)0 In cas
be50: 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e of SQLITE_OMIT
be60: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e  _FLOATING_POINT.
be70: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  .. */.        if
be80: 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20  ( rA==(double)0 
be90: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
bea0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
beb0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20  ;.        rB /= 
bec0: 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  rA;.        brea
bed0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
bee0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
bef0: 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41      iA = (i64)rA
bf00: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28  ;.        iB = (
bf10: 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20  i64)rB;.        
bf20: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
bf30: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bf40: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
bf50: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
bf60: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
bf70: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
bf80: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
bf90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
bfa0: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
bfb0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
bfc0: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
bfd0: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
bfe0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bff0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
c000: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
c010: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
c020: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
c030: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c040: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
c050: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
c060: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c070: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
c080: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74  al);.    if( ((t
c090: 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f  ype1|type2)&MEM_
c0a0: 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e  Real)==0 && !bIn
c0b0: 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  tint ){.      sq
c0c0: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
c0d0: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
c0e0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
c0f0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
c100: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c110: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
c120: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
c130: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
c140: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
c150: 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a  Seq P1 * * P4.**
c160: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
c170: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
c180: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
c190: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
c1a0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
c1b0: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
c1c0: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
c1d0: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
c1e0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
c1f0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
c200: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
c210: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
c220: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
c230: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
c240: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
c250: 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
c260: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
c270: 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
c280: 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d  t a subsequent m
c290: 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29  in() or.** max()
c2a0: 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20   aggregate will 
c2b0: 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20  set to 1 if the 
c2c0: 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e  current row is n
c2d0: 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ot the minimum o
c2e0: 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54  r.** maximum.  T
c2f0: 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69  he P1 register i
c300: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
c310: 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72   0 by this instr
c320: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
c330: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
c340: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
c350: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
c360: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
c370: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
c380: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
c390: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
c3a0: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
c3b0: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
c3c0: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f  .** publicly.  O
c3d0: 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  nly built-in fun
c3e0: 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65  ctions have acce
c3f0: 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75  ss to this featu
c400: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  re..*/.case OP_C
c410: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
c420: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c430: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
c440: 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
c450: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c460: 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
c470: 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20  [pOp->p1], 0);. 
c480: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
c490: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
c4a0: 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34 20  on0 P1 P2 P3 P4 
c4b0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
c4c0: 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40  r[P3]=func(r[P2@
c4d0: 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  P5]).**.** Invok
c4e0: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
c4f0: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
c500: 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20  er to a FuncDef 
c510: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 64  object that.** d
c520: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
c530: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
c540: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
c550: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
c560: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
c570: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
c580: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
c590: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
c5a0: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
c5b0: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
c5c0: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
c5d0: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
c5e0: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
c5f0: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
c600: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
c610: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
c620: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
c630: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
c640: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
c650: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
c660: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
c670: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
c680: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
c690: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
c6a0: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
c6b0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
c6c0: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
c6d0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
c6e0: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
c6f0: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
c700: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
c710: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
c720: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
c730: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
c740: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
c750: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
c760: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
c770: 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e  e also: Function
c780: 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46 69  , AggStep, AggFi
c790: 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  nal.*/./* Opcode
c7a0: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
c7b0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
c7c0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e  opsis: r[P3]=fun
c7d0: 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  c(r[P2@P5]).**.*
c7e0: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
c7f0: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
c800: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
c810: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
c820: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 63  object that.** c
c830: 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
c840: 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  r to the functio
c850: 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69 74  n to be run) wit
c860: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
c870: 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65 67  aken.** from reg
c880: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75 63  ister P2 and suc
c890: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
c8a0: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
c8b0: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a 2a  tion is stored.*
c8c0: 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  * in register P3
c8d0: 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  .  Register P3 m
c8e0: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
c8f0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
c900: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
c910: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
c920: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
c930: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
c940: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
c950: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
c960: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
c970: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
c980: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
c990: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
c9a0: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
c9b0: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
c9c0: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
c9d0: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
c9e0: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
c9f0: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
ca00: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
ca10: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
ca20: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
ca30: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
ca40: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
ca50: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
ca60: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
ca70: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
ca80: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
ca90: 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  .**.** SQL funct
caa0: 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61 6c  ions are initial
cab0: 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 46  ly coded as OP_F
cac0: 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50 34  unction0 with P4
cad0: 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20   pointing.** to 
cae0: 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  a FuncDef object
caf0: 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74 20  .  But on first 
cb00: 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65 20  evaluation, the 
cb10: 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a 2a  P4 operand is.**
cb20: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
cb30: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
cb40: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
cb50: 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20   object and the 
cb60: 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68 61  operation.** cha
cb70: 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50 5f  nged to this OP_
cb80: 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65 2e  Function opcode.
cb90: 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
cba0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
cbb0: 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c 69  n of.** the sqli
cbc0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
cbd0: 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20 6f  ct occurs only o
cbe0: 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61 6e  nce, rather than
cbf0: 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 2a   once for each.*
cc00: 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  * evaluation of 
cc10: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
cc20: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75  .** See also: Fu
cc30: 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65 70  nction0, AggStep
cc40: 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  , AggFinal.*/.ca
cc50: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 3a  se OP_Function0:
cc60: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71   {.  int n;.  sq
cc70: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
cc80: 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
cc90: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
cca0: 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d  FUNCDEF );.  n =
ccb0: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
ccc0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
ccd0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
cce0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
ccf0: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ;.  assert( n==0
cd00: 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
cd10: 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d  & pOp->p2+n<=(p-
cd20: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
cd30: 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  )+1) );.  assert
cd40: 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
cd50: 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
cd60: 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74  p->p2+n );.  pCt
cd70: 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  x = sqlite3DbMal
cd80: 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
cd90: 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
cda0: 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
cdb0: 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
cdc0: 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
cdd0: 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
cde0: 4f 75 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Out = 0;.  pCtx-
cdf0: 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
ce00: 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
ce10: 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
ce20: 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
ce30: 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
ce40: 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
ce50: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
ce60: 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
ce70: 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
ce80: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
ce90: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f  OP_Function;.  /
cea0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
ceb0: 6e 74 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20  nto OP_Function 
cec0: 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e  */.}.case OP_Fun
ced0: 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69  ction: {.  int i
cee0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
cef0: 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
cf00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
cf10: 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
cf20: 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
cf30: 34 2e 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66  4.pCtx;..  /* If
cf40: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
cf50: 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
cf60: 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
cf70: 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
cf80: 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
cf90: 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
cfa0: 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
cfb0: 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
cfc0: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
cfd0: 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
cfe0: 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
cff0: 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
d000: 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
d010: 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
d020: 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
d030: 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
d040: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
d050: 62 6a 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20  bject */.  pOut 
d060: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
d070: 3b 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f  ;.  if( pCtx->pO
d080: 75 74 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20  ut != pOut ){.  
d090: 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70    pCtx->pOut = p
d0a0: 4f 75 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Out;.    for(i=p
d0b0: 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
d0c0: 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
d0d0: 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
d0e0: 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20  p->p2+i];.  }.. 
d0f0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d100: 65 28 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29  e(p, pCtx->pOut)
d110: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
d120: 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
d130: 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
d140: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
d150: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
d160: 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
d170: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
d180: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
d190: 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
d1a0: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74 54  #endif.  MemSetT
d1b0: 79 70 65 46 6c 61 67 28 70 43 74 78 2d 3e 70 4f  ypeFlag(pCtx->pO
d1c0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
d1d0: 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
d1e0: 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61  ux = 0;.  db->la
d1f0: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
d200: 77 69 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70  wid;.  (*pCtx->p
d210: 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43  Func->xSFunc)(pC
d220: 74 78 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20  tx, pCtx->argc, 
d230: 70 43 74 78 2d 3e 61 72 67 76 29 3b 2f 2a 20 49  pCtx->argv);/* I
d240: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
d250: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
d260: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
d270: 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72  ;  /* Remember r
d280: 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64  owid changes mad
d290: 65 20 62 79 20 78 53 46 75 6e 63 20 2a 2f 0a 0a  e by xSFunc */..
d2a0: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
d2b0: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
d2c0: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
d2d0: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
d2e0: 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  if( pCtx->fError
d2f0: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
d300: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
d310: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
d320: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
d330: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d340: 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
d350: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
d360: 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
d370: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
d380: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
d390: 70 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f  p, pCtx->iOp, pO
d3a0: 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  p->p1);.  }..  /
d3b0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d3c0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d3d0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d3e0: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d3f0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d400: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d410: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d420: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d430: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d440: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d450: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d460: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d470: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d480: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d490: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d4a0: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d4b0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d4c0: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d4d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d4e0: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d4f0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d500: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d510: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d520: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d530: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d540: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d550: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d560: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d570: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d580: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d590: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d5a0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d5b0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d5c0: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d5d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d5e0: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d5f0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d600: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d610: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d620: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d630: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d640: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d650: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d660: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d670: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d680: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d690: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
d6a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d6b0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d6c0: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
d6d0: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d6e0: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d6f0: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d700: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
d710: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
d720: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
d730: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
d740: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
d750: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
d760: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
d770: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
d780: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
d790: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
d7a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
d7b0: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
d7c0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d7d0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
d7e0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
d7f0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
d800: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
d810: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
d820: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d830: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d840: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d850: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d860: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d870: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d880: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d890: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d8a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d8b0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
d8c0: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
d8d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d8e0: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
d8f0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
d900: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d920: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
d930: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
d940: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
d950: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
d960: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d970: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
d980: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
d990: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
d9a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
d9b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
d9c0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
d9d0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
d9e0: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
d9f0: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
da00: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
da10: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
da20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
da30: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
da40: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
da50: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
da60: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
da70: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
da80: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
da90: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
daa0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
dab0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
dac0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
dad0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
dae0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
daf0: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
db00: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
db10: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
db20: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
db30: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
db40: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
db50: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
db60: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
db70: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
db80: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
db90: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
dba0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
dbb0: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
dbc0: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
dbd0: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
dbe0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
dbf0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
dc00: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
dc10: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
dc20: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
dc30: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
dc40: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
dc50: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
dc60: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
dc70: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
dc80: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
dc90: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
dca0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
dcb0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
dcc0: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
dcd0: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
dce0: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
dcf0: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
dd00: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
dd10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
dd20: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
dd30: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
dd40: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
dd50: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
dd60: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
dd70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
dd80: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
dd90: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
dda0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
ddb0: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
ddc0: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
ddd0: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
dde0: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
ddf0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
de00: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
de10: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
de20: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
de30: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
de40: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
de50: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
de60: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
de70: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
de80: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
de90: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
dea0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
deb0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
dec0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
ded0: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
dee0: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
def0: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
df00: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
df10: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
df20: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
df30: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
df40: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
df50: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
df60: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
df70: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
df80: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
df90: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
dfa0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
dfb0: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
dfc0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
dfd0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
dfe0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
dff0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e000: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e010: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e020: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e030: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e040: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e050: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e060: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e070: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e080: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e090: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e0a0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e0b0: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e0c0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e0d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e0e0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e0f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e100: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e110: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e120: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e130: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e140: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e150: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e160: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e170: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e180: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e190: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e1a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e1b0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e1c0: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e1d0: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e1e0: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e1f0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e200: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e210: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e220: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e230: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e240: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e250: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e260: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e270: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e280: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e290: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e2a0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e2b0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e2c0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e2d0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e2e0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e2f0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e300: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e310: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e320: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e330: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e340: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e350: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e360: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e370: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e380: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e390: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e3a0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e3b0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e3c0: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e3d0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e3e0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e3f0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e400: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e410: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e420: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e430: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e440: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e450: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e460: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e470: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e480: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e490: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e4a0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e4b0: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e4c0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e4d0: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e4e0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e4f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e500: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e510: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e520: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e530: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e540: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e550: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e560: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e570: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e580: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e590: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e5a0: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e5b0: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e5c0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e5d0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e5e0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e5f0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e600: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e620: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
e630: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
e640: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
e650: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
e660: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
e670: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e680: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
e690: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
e6a0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
e6b0: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
e6c0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e6d0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
e6e0: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
e6f0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e700: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
e710: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
e720: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
e730: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
e740: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e750: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
e760: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
e770: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
e780: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
e790: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
e7a0: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
e7b0: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
e7c0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
e7d0: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
e7e0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
e7f0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
e800: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
e810: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e820: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e830: 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]<r[P3] goto P2
e840: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
e850: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
e860: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
e870: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
e880: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
e890: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
e8a0: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
e8b0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e8c0: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
e8d0: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
e8e0: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
e8f0: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
e900: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
e910: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
e920: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
e930: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
e940: 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20  fall through if 
e950: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e960: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
e970: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e980: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e990: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e9a0: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e9b0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e9c0: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e9d0: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e9e0: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e9f0: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
ea00: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
ea10: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
ea20: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
ea30: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
ea40: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
ea50: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
ea60: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
ea70: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
ea80: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
ea90: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
eaa0: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
eab0: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
eac0: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
ead0: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
eae0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
eaf0: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
eb00: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
eb10: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
eb20: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
eb30: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
eb40: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
eb50: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
eb60: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
eb70: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
eb80: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
eb90: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
eba0: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
ebb0: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
ebc0: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
ebd0: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
ebe0: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
ebf0: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
ec00: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
ec10: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
ec20: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
ec30: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
ec40: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
ec50: 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  s  used to do th
ec60: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
ec70: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
ec80: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
ec90: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
eca0: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
ecb0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
ecc0: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
ecd0: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
ece0: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
ecf0: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
ed00: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
ed10: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
ed20: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
ed30: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
ed40: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
ed50: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
ed60: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
ed70: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
ed80: 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  bs..**.** If the
ed90: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
eda0: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
edb0: 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75  , then do not ju
edc0: 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a  mp.  Instead,.**
edd0: 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e   store a boolean
ede0: 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20   result (either 
edf0: 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c  0, or 1, or NULL
ee00: 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
ee10: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
ee20: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74  QLITE_NULLEQ bit
ee30: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
ee40: 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  hen NULL values 
ee50: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a  are considered.*
ee60: 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  * equal to one a
ee70: 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64  nother, provided
ee80: 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f   that they do no
ee90: 74 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d  t have their MEM
eea0: 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20  _Cleared.** bit 
eeb0: 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  set..*/./* Opcod
eec0: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
eed0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
eee0: 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33  : if r[P1]!=r[P3
eef0: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
ef00: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
ef10: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
ef20: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
ef30: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
ef40: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
ef50: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
ef60: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
ef70: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
ef80: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ef90: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
efa0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
efb0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
efc0: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
efd0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
efe0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
eff0: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
f000: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
f010: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
f020: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
f030: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
f040: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
f050: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
f060: 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74  s false.  If eit
f070: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f080: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
f090: 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20  ult is true..** 
f0a0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
f0b0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
f0c0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
f0d0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
f0e0: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
f0f0: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
f100: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
f110: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
f120: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
f130: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
f140: 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d   if r[P1]==r[P3]
f150: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
f160: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f170: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f180: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f190: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f1a0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
f1b0: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
f1c0: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
f1d0: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
f1e0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f1f0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f200: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
f210: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f220: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
f230: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
f240: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
f250: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
f260: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
f270: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
f280: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f290: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
f2a0: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
f2b0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
f2c0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
f2d0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f2e0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f2f0: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
f300: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f310: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
f320: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
f330: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
f340: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
f350: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
f360: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
f370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
f380: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f390: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f3a0: 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]<=r[P3] goto 
f3b0: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
f3c0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f3d0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f3e0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f3f0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f400: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f410: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
f420: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
f430: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
f440: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
f450: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
f460: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
f470: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f480: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f490: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
f4a0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
f4b0: 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f  f r[P1]>r[P3] go
f4c0: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
f4d0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
f4e0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
f4f0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
f500: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
f510: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
f520: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
f530: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
f540: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f550: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f560: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f570: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f580: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
f590: 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20  * Opcode: Ge P1 
f5a0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f5b0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f5c0: 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]>=r[P3] goto P2
f5d0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
f5e0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
f5f0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
f600: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
f610: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
f620: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
f630: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
f640: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
f650: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
f660: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f670: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f680: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f690: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f6a0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71  n..*/.case OP_Eq
f6b0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f6c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51  /* same as TK_EQ
f6d0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f6e0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20   */.case OP_Ne: 
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f700: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20   same as TK_NE, 
f710: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f720: 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20  /.case OP_Lt:   
f730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f740: 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75  ame as TK_LT, ju
f750: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f760: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20  case OP_Le:     
f770: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f780: 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70  e as TK_LE, jump
f790: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f7a0: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20  se OP_Gt:       
f7b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f7c0: 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20  as TK_GT, jump, 
f7d0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f7e0: 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20   OP_Ge: {       
f7f0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f800: 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GE, jump, in
f810: 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
f820: 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
f830: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65  /* Result of the
f840: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70   comparison of p
f850: 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33  In1 against pIn3
f860: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
f870: 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
f880: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72  inity to use for
f890: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
f8a0: 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20   u16 flags1;    
f8b0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
f8c0: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
f8d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn1->flags */.
f8e0: 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20    u16 flags3;   
f8f0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
f900: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
f910: 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn3->flags */
f920: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f930: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
f940: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
f950: 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70  3];.  flags1 = p
f960: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c  In1->flags;.  fl
f970: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
f980: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
f990: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
f9a0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  Null ){.    /* O
f9b0: 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61  ne or both opera
f9c0: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  nds are NULL */.
f9d0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f9e0: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  & SQLITE_NULLEQ 
f9f0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53  ){.      /* If S
fa00: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
fa10: 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20  set (which will 
fa20: 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74  only happen if t
fa30: 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20  he operator is. 
fa40: 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72       ** OP_Eq or
fa50: 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b   OP_Ne) then tak
fa60: 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f  e the jump or no
fa70: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
fa80: 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20  hether.      ** 
fa90: 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72  or not both oper
faa0: 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20  ands are null.. 
fab0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
fac0: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
fad0: 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d  e==OP_Eq || pOp-
fae0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
faf0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
fb00: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c  (flags1 & MEM_Cl
fb10: 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20  eared)==0 );.   
fb20: 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
fb30: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
fb40: 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20  PIFNULL)==0 );. 
fb50: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
fb60: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
fb70: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
fb80: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
fb90: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
fba0: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20  EM_Cleared)==0. 
fbb0: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
fbc0: 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73  res = 0;  /* Res
fbd0: 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a  ults are equal *
fbe0: 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
fbf0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20         res = 1; 
fc00: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
fc10: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fc20: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
fc30: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
fc40: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
fc50: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
fc60: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
fc70: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
fc80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
fc90: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
fca0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
fcb0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
fcc0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
fcd0: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
fce0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
fcf0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
fd00: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
fd10: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
fd20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
fd30: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
fd40: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
fd50: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fd60: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
fd70: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
fd80: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fd90: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
fda0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fdb0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
fdc0: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
fdd0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
fde0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
fdf0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
fe00: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
fe10: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
fe20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
fe30: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
fe40: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
fe50: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
fe60: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
fe70: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
fe80: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
fe90: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
fea0: 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54   affinity>=SQLIT
feb0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b  E_AFF_NUMERIC ){
fec0: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
fed0: 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
fee0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
fef0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
ff00: 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
ff10: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30  cAffinity(pIn1,0
ff20: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
ff30: 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20 28   if( (flags3 & (
ff40: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
ff50: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
ff60: 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Str ){.        a
ff70: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
ff80: 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20  ity(pIn3,0);.   
ff90: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69     }.    }else i
ffa0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
ffb0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
ffc0: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
ffd0: 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  1 & MEM_Str)==0 
ffe0: 26 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  && (flags1 & (ME
fff0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
10000 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
10010 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
10020 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
10030 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
10040 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  se( pIn1->flags 
10050 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
10060 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10070 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
10080 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n1, encoding, 1)
10090 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
100a0 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f  se( (flags1&MEM_
100b0 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66  Dyn) != (pIn1->f
100c0 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
100d0 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31 20  .        flags1 
100e0 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  = (pIn1->flags &
100f0 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
10100 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  | (flags1 & MEM_
10110 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
10120 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c   }.      if( (fl
10130 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d  ags3 & MEM_Str)=
10140 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20 26 20  =0 && (flags3 & 
10150 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
10160 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
10170 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
10180 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
10190 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
101a0 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
101b0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
101c0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
101d0 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
101e0 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn3, encoding,
101f0 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
10200 74 63 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d  tcase( (flags3&M
10210 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33  EM_Dyn) != (pIn3
10220 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
10230 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
10240 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  s3 = (pIn3->flag
10250 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
10260 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d  k) | (flags3 & M
10270 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
10280 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
10290 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
102a0 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
102b0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
102c0 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 66  ==0 );.    if( f
102d0 6c 61 67 73 31 20 26 20 4d 45 4d 5f 5a 65 72 6f  lags1 & MEM_Zero
102e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
102f0 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
10300 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20  ob(pIn1);.      
10310 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a  flags1 &= ~MEM_Z
10320 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
10330 66 28 20 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  f( flags3 & MEM_
10340 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
10350 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
10360 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
10370 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d      flags3 &= ~M
10380 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20  EM_Zero;.    }. 
10390 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
103a0 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
103b0 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
103c0 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
103d0 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
103e0 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
103f0 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
10400 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
10410 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
10420 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
10430 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10440 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
10450 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
10460 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10470 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
10480 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
10490 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
104a0 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
104b0 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
104c0 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
104d0 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
104e0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
104f0 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
10500 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
10510 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
10520 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
10530 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65  sters. */.  asse
10540 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
10550 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
10560 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e  flags1 & MEM_Dyn
10570 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
10580 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61  gs = flags1;.  a
10590 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
105a0 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
105b0 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  = (flags3 & MEM_
105c0 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e  Dyn) );.  pIn3->
105d0 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
105e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
105f0 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10600 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
10610 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10620 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
10630 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
10640 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10650 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
10660 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
10670 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
10680 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
10690 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b   pOut);.  }else{
106a0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
106b0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f  aken(res!=0, (pO
106c0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
106d0 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20  ULLEQ)?2:3);.   
106e0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
106f0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
10700 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  2;.    }.  }.  b
10710 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10720 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
10730 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
10740 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
10750 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
10760 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
10770 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
10780 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
10790 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
107a0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
107b0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
107c0 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
107d0 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
107e0 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
107f0 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
10800 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
10810 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
10820 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
10830 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
10840 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
10850 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20  _Compare..**.** 
10860 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67 65  The first intege
10870 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e 74 65  r in the P4 inte
10880 67 65 72 20 61 72 72 61 79 20 69 73 20 74 68 65  ger array is the
10890 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 61   length of the a
108a0 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73  rray.** and does
108b0 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61 72 74   not become part
108c0 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74 61 74   of the permutat
108d0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
108e0 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
108f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10900 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
10910 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
10920 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
10930 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
10940 34 2e 61 69 20 2b 20 31 3b 0a 20 20 62 72 65 61  4.ai + 1;.  brea
10950 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10960 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50   Compare P1 P2 P
10970 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
10980 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d  sis: r[P1@P3] <-
10990 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  > r[P2@P3].**.**
109a0 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63   Compare two vec
109b0 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72  tors of register
109c0 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65  s in reg(P1)..re
109d0 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c  g(P1+P3-1) (call
109e0 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20   this.** vector 
109f0 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28  "A") and in reg(
10a00 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31  P2)..reg(P2+P3-1
10a10 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74  ) ("B").  Save t
10a20 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
10a30 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  the comparison f
10a40 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65  or use by the ne
10a50 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  xt OP_Jump instr
10a60 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  uct..**.** If P5
10a70 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
10a80 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c  PERMUTE bit set,
10a90 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
10aa0 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
10ab0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .** determined b
10ac0 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  y the most recen
10ad0 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  t OP_Permutation
10ae0 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74   operator.  If t
10af0 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52  he.** OPFLAG_PER
10b00 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65 61  MUTE bit is clea
10b10 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  r, then register
10b20 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e   are compared in
10b30 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f   sequential.** o
10b40 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  rder..**.** P4 i
10b50 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  s a KeyInfo stru
10b60 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e  cture that defin
10b70 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  es collating seq
10b80 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a  uences and sort.
10b90 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68  ** orders for th
10ba0 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
10bb0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61  he permutation a
10bc0 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74  pplies to regist
10bd0 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  ers.** only.  Th
10be0 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e  e KeyInfo elemen
10bf0 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75  ts are used sequ
10c00 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  entially..**.** 
10c10 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  The comparison i
10c20 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69  s a sort compari
10c30 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f  son, so NULLs co
10c40 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20  mpare equal,.** 
10c50 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74  NULLs are less t
10c60 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d  han numbers, num
10c70 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68  bers are less th
10c80 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61  an strings,.** a
10c90 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c  nd strings are l
10ca0 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
10cb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61  */.case OP_Compa
10cc0 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  re: {.  int n;. 
10cd0 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31   int i;.  int p1
10ce0 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f  ;.  int p2;.  co
10cf0 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
10d00 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78  yInfo;.  int idx
10d10 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ;.  CollSeq *pCo
10d20 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  ll;    /* Collat
10d30 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ing sequence to 
10d40 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d  use on this term
10d50 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20   */.  int bRev; 
10d60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
10d70 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20   for DESCENDING 
10d80 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20  sort order */.. 
10d90 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
10da0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d  OPFLAG_PERMUTE)=
10db0 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20  =0 ) aPermute = 
10dc0 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  0;.  n = pOp->p3
10dd0 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ;.  pKeyInfo = p
10de0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
10df0 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29  .  assert( n>0 )
10e00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79  ;.  assert( pKey
10e10 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20  Info!=0 );.  p1 
10e20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
10e30 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53  = pOp->p2;.#if S
10e40 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
10e50 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20  ( aPermute ){.  
10e60 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b    int k, mx = 0;
10e70 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c  .    for(k=0; k<
10e80 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72  n; k++) if( aPer
10e90 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20  mute[k]>mx ) mx 
10ea0 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20  = aPermute[k];. 
10eb0 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
10ec0 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p1+mx<=(p->nM
10ed0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
10ee0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
10ef0 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28  p2>0 && p2+mx<=(
10f00 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
10f10 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65  or)+1 );.  }else
10f20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31  {.    assert( p1
10f30 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e  >0 && p1+n<=(p->
10f40 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
10f50 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
10f60 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d  ( p2>0 && p2+n<=
10f70 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
10f80 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  sor)+1 );.  }.#e
10f90 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
10fa0 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
10fb0 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
10fc0 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
10fd0 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
10fe0 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   i;.    assert( 
10ff0 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
11000 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p1+idx]) );.   
11010 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11020 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78  lid(&aMem[p2+idx
11030 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
11040 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
11050 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b   &aMem[p1+idx]);
11060 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
11070 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65  ACE(p2+idx, &aMe
11080 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
11090 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
110a0 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  fo->nField );.  
110b0 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
110c0 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
110d0 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
110e0 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
110f0 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
11100 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
11110 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  re(&aMem[p1+idx]
11120 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  , &aMem[p2+idx],
11130 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
11140 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
11150 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
11160 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
11170 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
11180 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65  .    }.  }.  aPe
11190 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65  rmute = 0;.  bre
111a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
111b0 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
111c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
111d0 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
111e0 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
111f0 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
11200 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
11210 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
11220 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
11230 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
11240 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
11250 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
11260 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
11270 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
11280 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
11290 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
112a0 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
112b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
112c0 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
112d0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
112e0 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d  aken(0,3); pOp =
112f0 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20   &aOp[pOp->p1 - 
11300 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  1];.  }else if( 
11310 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
11320 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11330 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(1,3); pOp = &
11340 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
11350 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
11360 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
11370 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
11380 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20  pOp->p3 - 1];.  
11390 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
113a0 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20   Opcode: And P1 
113b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
113c0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
113d0 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a  P1] && r[P2]).**
113e0 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
113f0 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
11400 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
11410 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
11420 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
11430 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
11440 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
11450 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
11460 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
11470 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
11480 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
11490 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
114a0 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
114b0 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
114c0 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
114d0 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
114e0 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
114f0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
11500 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
11510 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a  P1] || r[P2]).**
11520 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
11530 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76  ical OR of the v
11540 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
11550 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
11560 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73  ** store the ans
11570 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  wer in register 
11580 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
11590 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
115a0 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74  nonzero (true) t
115b0 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
115c0 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76  s 1 (true).** ev
115d0 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20  en if the other 
115e0 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
115f0 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65  A NULL and false
11600 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a   or two NULLs.**
11610 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74   give a NULL out
11620 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
11630 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
11640 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11650 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
11660 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ut3 */.case OP_O
11670 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  r: {            
11680 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f   /* same as TK_O
11690 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
116a0 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20  3 */.  int v1;  
116b0 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e    /* Left operan
116c0 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  d:  0==FALSE, 1=
116d0 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
116e0 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  N or NULL */.  i
116f0 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67  nt v2;    /* Rig
11700 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46  ht operand: 0==F
11710 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
11720 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
11730 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  L */..  pIn1 = &
11740 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11750 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
11760 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
11770 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c     v1 = 2;.  }el
11780 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c  se{.    v1 = sql
11790 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
117a0 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn1)!=0;.  }. 
117b0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
117c0 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
117d0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
117e0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d  Null ){.    v2 =
117f0 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
11800 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v2 = sqlite3Vdb
11810 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21  eIntValue(pIn2)!
11820 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  =0;.  }.  if( pO
11830 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e  p->opcode==OP_An
11840 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  d ){.    static 
11850 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
11860 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20  har and_logic[] 
11870 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  = { 0, 0, 0, 0, 
11880 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b  1, 2, 0, 2, 2 };
11890 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f  .    v1 = and_lo
118a0 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20  gic[v1*3+v2];.  
118b0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69  }else{.    stati
118c0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
118d0 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d   char or_logic[]
118e0 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c   = { 0, 1, 2, 1,
118f0 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d   1, 1, 2, 1, 2 }
11900 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f  ;.    v1 = or_lo
11910 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20  gic[v1*3+v2];.  
11920 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  }.  pOut = &aMem
11930 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
11940 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65   v1==2 ){.    Me
11950 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
11960 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
11970 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
11980 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d  >u.i = v1;.    M
11990 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
119a0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
119b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
119c0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20   Opcode: Not P1 
119d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
119e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b  psis: r[P2]= !r[
119f0 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
11a00 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ret the value in
11a10 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
11a20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
11a30 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62    Store the.** b
11a40 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e  oolean complemen
11a50 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  t in register P2
11a60 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
11a70 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
11a80 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e  s .** NULL, then
11a90 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65   a NULL is store
11aa0 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  d in P2..*/.case
11ab0 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
11ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11ad0 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
11ae0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
11af0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11b00 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
11b10 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
11b20 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
11b30 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
11b40 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11b50 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
11b60 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
11b70 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
11b80 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69  Out->u.i = !sqli
11b90 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11ba0 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
11bb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11bc0 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a  : BitNot P1 P2 *
11bd0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11be0 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a  : r[P1]= ~r[P1].
11bf0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
11c00 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
11c10 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
11c20 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
11c30 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
11c40 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
11c50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
11c60 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
11c70 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
11c80 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
11c90 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
11ca0 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
11cb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11cc0 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
11cd0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
11ce0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11cf0 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
11d00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11d20 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
11d30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11d40 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11d50 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
11d60 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
11d70 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e     pOut->u.i = ~
11d80 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11d90 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
11da0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11db0 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32  code: Once P1 P2
11dc0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
11dd0 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c  ck the "once" fl
11de0 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66  ag number P1. If
11df0 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70   it is set, jump
11e00 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
11e10 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73  P2. .** Otherwis
11e20 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67 20  e, set the flag 
11e30 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
11e40 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
11e50 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20  truction..** In 
11e60 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69  other words, thi
11e70 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
11e80 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70  all following op
11e90 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67 68  codes up through
11ea0 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20   P2.** (but not 
11eb0 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f  including P2) to
11ec0 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61   run just once a
11ed0 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64  nd to be skipped
11ee0 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a   on subsequent.*
11ef0 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20  * times through 
11f00 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  the loop..**.** 
11f10 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73  All "once" flags
11f20 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63   are initially c
11f30 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65 72 20  leared whenever 
11f40 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
11f50 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65  ment.** first be
11f60 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a  gins to run..*/.
11f70 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20  case OP_Once: { 
11f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
11f90 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
11fa0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63   pOp->p1<p->nOnc
11fb0 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42  eFlag );.  VdbeB
11fc0 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f  ranchTaken(p->aO
11fd0 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11fe0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  !=0, 2);.  if( p
11ff0 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
12000 3e 70 31 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  >p1] ){.    goto
12010 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
12020 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e  else{.    p->aOn
12030 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
12040 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
12050 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12060 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  If P1 P2 P3 * *.
12070 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12080 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12090 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
120a0 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  true.  The value
120b0 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
120c0 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
120d0 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
120e0 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
120f0 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
12100 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
12110 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f  he jump if and o
12120 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e  nly if P3 is non
12130 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  -zero..*/./* Opc
12140 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
12150 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
12160 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
12170 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12180 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
12190 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
121a0 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
121b0 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
121c0 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
121d0 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
121e0 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
121f0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
12200 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
12210 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
12220 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
12230 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  If:             
12240 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
12250 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
12260 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
12270 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
12280 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20    int c;.  pIn1 
12290 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
122a0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
122b0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
122c0 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70  {.    c = pOp->p
122d0 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64  3;.  }else{.#ifd
122e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
122f0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
12300 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
12310 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
12320 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  =0;.#else.    c 
12330 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
12340 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
12350 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
12360 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
12370 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
12380 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
12390 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29  chTaken(c!=0, 2)
123a0 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20  ;.  if( c ){.   
123b0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
123c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
123d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
123e0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
123f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
12400 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
12410 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
12420 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
12430 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12440 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
12450 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
12460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12470 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
12480 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12490 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
124a0 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
124b0 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
124c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
124d0 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)!=0, 2);.  if(
124e0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
124f0 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
12500 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12510 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
12520 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12530 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20  NotNull P1 P2 * 
12540 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12550 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20   if r[P1]!=NULL 
12560 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
12570 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
12580 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12590 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
125a0 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
125b0 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
125c0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
125d0 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
125e0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
125f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12600 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
12610 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
12620 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
12630 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
12640 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12650 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  ull)==0 ){.    g
12660 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12670 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12680 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
12690 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
126a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
126b0 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
126c0 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
126d0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
126e0 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
126f0 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
12700 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
12710 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
12720 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
12730 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
12740 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
12750 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
12760 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
12770 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
12780 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
12790 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
127a0 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
127b0 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
127c0 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
127d0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
127e0 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
127f0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
12800 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
12810 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
12820 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
12830 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
12840 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
12850 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
12860 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
12870 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
12880 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
12890 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
128a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
128b0 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
128c0 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
128d0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
128e0 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
128f0 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
12900 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
12910 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
12920 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
12930 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
12940 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
12950 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
12960 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
12970 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
12980 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
12990 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
129a0 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
129b0 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
129c0 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
129d0 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
129e0 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  et..**.** If the
129f0 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
12a00 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
12a10 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20  EOFARG bits are 
12a20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a  set on P5 when.*
12a30 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
12a40 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e  guaranteed to on
12a50 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ly be used as th
12a60 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20  e argument of a 
12a70 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74  length().** or t
12a80 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
12a90 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
12aa0 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20   The loading of 
12ab0 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20  large blobs can 
12ac0 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f  be.** skipped fo
12ad0 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61  r length() and a
12ae0 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69  ll content loadi
12af0 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65  ng can be skippe
12b00 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a  d for typeof()..
12b10 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
12b20 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f  n: {.  i64 paylo
12b30 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
12b40 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
12b50 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
12b60 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
12b70 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
12b80 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
12b90 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
12ba0 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
12bb0 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
12bc0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
12bd0 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20     /* The BTree 
12be0 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20  cursor */.  u32 
12bf0 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  *aOffset;      /
12c00 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20  * aOffset[i] is 
12c10 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20  offset to start 
12c20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68  of data for i-th
12c30 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
12c40 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
12c50 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  /* The length of
12c60 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20   the serialized 
12c70 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c  data for the col
12c80 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  umn */.  int i; 
12c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
12ca0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
12cb0 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20   Mem *pDest;    
12cc0 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20      /* Where to 
12cd0 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63  write the extrac
12ce0 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d  ted value */.  M
12cf0 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
12d00 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
12d10 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
12d20 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
12d30 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20  onst u8 *zData; 
12d40 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65    /* Part of the
12d50 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
12d60 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
12d70 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a   u8 *zHdr;    /*
12d80 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20 62   Next unparsed b
12d90 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  yte of the heade
12da0 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  r */.  const u8 
12db0 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69  *zEndHdr; /* Poi
12dc0 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79  nter to first by
12dd0 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61  te after the hea
12de0 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66  der */.  u32 off
12df0 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  set;        /* O
12e00 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64  ffset into the d
12e10 61 74 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66  ata */.  u64 off
12e20 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36  set64;      /* 6
12e30 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a  4-bit offset */.
12e40 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20    u32 avail;    
12e50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12e60 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c  f bytes of avail
12e70 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75  able data */.  u
12e80 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
12e90 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
12ea0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
12eb0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d   header */.  Mem
12ec0 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
12ed0 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
12ee0 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
12ef0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
12f00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32  r[pOp->p1];.  p2
12f10 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f   = pOp->p2;..  /
12f20 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
12f30 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20  cache is stale, 
12f40 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
12f50 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ate */.  rc = sq
12f60 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
12f70 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b  oveto(&pC, &p2);
12f80 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
12f90 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
12fa0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
12fb0 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
12fc0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
12fd0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
12fe0 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
12ff0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
13000 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
13010 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
13020 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
13030 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  );.  assert( p2<
13040 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  pC->nField );.  
13050 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
13060 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28  ffset;.  assert(
13070 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13080 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
13090 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
130a0 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
130b0 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
130c0 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74  lRow );.  assert
130d0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
130e0 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29  CURTYPE_SORTER )
130f0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
13100 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 69  uc.pCursor;..  i
13110 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
13120 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
13130 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
13140 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65  Status!=p->cache
13150 43 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70  Ctr ){.    if( p
13160 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
13170 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72      if( pC->eCur
13180 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53  Type==CURTYPE_PS
13190 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20  EUDO ){.        
131a0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
131b0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20  seudoTableReg>0 
131c0 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
131d0 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70  = &aMem[pC->uc.p
131e0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
131f0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
13200 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
13210 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
13220 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
13230 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
13240 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
13250 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f  dSize = pC->szRo
13260 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67  w = avail = pReg
13270 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ->n;.        pC-
13280 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65  >aRow = (u8*)pRe
13290 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g->z;.      }els
132a0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
132b0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
132c0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20  (pDest);.       
132d0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
132e0 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
132f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
13300 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
13310 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
13320 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
13330 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
13340 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
13350 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
13360 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
13370 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
13380 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
13390 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
133a0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
133b0 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  eySize(pCrsr, &p
133c0 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20  ayloadSize64);. 
133d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
133e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
133f0 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
13400 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
13410 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
13420 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
13430 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c  e3BtreeParseCell
13440 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56 61  Ptr() uses getVa
13450 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72  rint32() to extr
13460 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20 20  act the.        
13470 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
13480 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
13490 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
134a0 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
134b0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
134c0 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
134d0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
134e0 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
134f0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
13500 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
13510 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20 20  ze64 );.        
13520 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
13530 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28  e3BtreeKeyFetch(
13540 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
13550 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
13560 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
13570 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
13580 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13590 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
135a0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
135b0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
135c0 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
135d0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
135e0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
135f0 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  , &pC->payloadSi
13600 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ze);.        ass
13610 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
13620 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53  OK );   /* DataS
13630 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
13640 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43 2d  l */.        pC-
13650 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
13660 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
13670 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
13680 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
13690 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36  rt( avail<=65536
136a0 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20   );  /* Maximum 
136b0 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b  page size is 64K
136c0 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  iB */.      if( 
136d0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
136e0 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b  <= (u32)avail ){
136f0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
13700 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ow = pC->payload
13710 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Size;.      }els
13720 65 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61  e if( pC->payloa
13730 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
13740 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
13750 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
13760 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f          goto too
13770 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _big;.      }els
13780 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73  e{.        pC->s
13790 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20  zRow = avail;.  
137a0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
137b0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
137c0 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  = p->cacheCtr;. 
137d0 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
137e0 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28  t = getVarint32(
137f0 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74  pC->aRow, offset
13800 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  );.    pC->nHdrP
13810 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61  arsed = 0;.    a
13820 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73  Offset[0] = offs
13830 65 74 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61 76  et;...    if( av
13840 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20  ail<offset ){.  
13850 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20      /* pC->aRow 
13860 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
13870 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65   hold the entire
13880 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65   row, but it doe
13890 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20  s at least.     
138a0 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65   ** need to cove
138b0 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20  r the header of 
138c0 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20  the record.  If 
138d0 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
138e0 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20  t contain.      
138f0 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** the complete 
13900 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74  header, then set
13910 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72   it to zero, for
13920 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20  cing the header 
13930 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64  to be.      ** d
13940 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
13950 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ated. */.      p
13960 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
13970 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30     pC->szRow = 0
13980 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
13990 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
139a0 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
139b0 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
139c0 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
139d0 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e      ** Do this n
139e0 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f  ow to avoid an o
139f0 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61  versize memory a
13a00 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20  llocation..     
13a10 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70   **.      ** Typ
13a20 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
13a30 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
13a40 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
13a50 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
13a60 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73       ** types us
13a70 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73  e so much data s
13a80 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20  pace that there 
13a90 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36  can only be 4096
13aa0 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20   and 32 of.     
13ab0 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63   ** them, respec
13ac0 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20  tively.  So the 
13ad0 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c  maximum header l
13ae0 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72  ength results fr
13af0 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d  om a.      ** 3-
13b00 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
13b10 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
13b20 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
13b30 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
13b40 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74      ** extra byt
13b50 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65  es for the heade
13b60 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e  r length itself.
13b70 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20    32768*3 + 3 = 
13b80 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a  98307..      */.
13b90 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74        if( offset
13ba0 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73   > 98307 || offs
13bb0 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  et > pC->payload
13bc0 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Size ){.        
13bd0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
13be0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
13bf0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13c00 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
13c10 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68      }..    /* Th
13c20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f  e following goto
13c30 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   is an optimizat
13c40 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20  ion.  It can be 
13c50 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20  omitted and.    
13c60 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77 69  ** everything wi
13c70 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20  ll still work.  
13c80 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73  But OP_Column is
13c90 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73 74   measurably fast
13ca0 65 72 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b 69  er.    ** by ski
13cb0 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65 71  pping the subseq
13cc0 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  uent conditional
13cd0 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79  , which is alway
13ce0 73 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20  s true..    */. 
13cf0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e     assert( pC->n
13d00 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b  HdrParsed<=p2 );
13d10 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64           /* Cond
13d20 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20  itional skipped 
13d30 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  */.    goto op_c
13d40 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
13d50 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  r;.  }..  /* Mak
13d60 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74 20  e sure at least 
13d70 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20 65  the first p2+1 e
13d80 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68 65  ntries of the he
13d90 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20  ader have been. 
13da0 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76   ** parsed and v
13db0 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  alid information
13dc0 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d   is in aOffset[]
13dd0 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d   and pC->aType[]
13de0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d  ..  */.  if( pC-
13df0 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
13e00 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
13e10 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65  re is more heade
13e20 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  r available for 
13e30 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72  parsing in the r
13e40 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a  ecord, try.    *
13e50 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64 64  * to extract add
13e60 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
13e70 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32  p through the p2
13e80 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20  +1-th field .   
13e90 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d   */.    op_colum
13ea0 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20  n_read_header:. 
13eb0 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f     if( pC->iHdrO
13ec0 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d  ffset<aOffset[0]
13ed0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   ){.      /* Mak
13ee0 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69  e sure zData poi
13ef0 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66  nts to enough of
13f00 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63   the record to c
13f10 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e  over the header.
13f20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
13f30 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
13f40 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
13f50 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
13f60 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  m));.        rc 
13f70 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
13f80 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
13f90 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20   0, aOffset[0], 
13fa0 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73  !pC->isTable, &s
13fb0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  Mem);.        if
13fc0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
13fd0 29 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e  ) goto op_column
13fe0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
13ff0 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
14000 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
14010 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
14020 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
14030 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
14040 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
14050 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
14060 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
14070 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
14080 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20 3d  ld. */.      i =
14090 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b   pC->nHdrParsed;
140a0 0a 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20  .      offset64 
140b0 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20  = aOffset[i];.  
140c0 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61      zHdr = zData
140d0 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65   + pC->iHdrOffse
140e0 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72  t;.      zEndHdr
140f0 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73   = zData + aOffs
14100 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73  et[0];.      ass
14110 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ert( i<=p2 && zH
14120 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
14130 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
14140 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d  if( (t = zHdr[0]
14150 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  )<0x80 ){.      
14160 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20      zHdr++;.    
14170 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b        offset64 +
14180 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65  = sqlite3VdbeOne
14190 42 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65  ByteSerialTypeLe
141a0 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  n(t);.        }e
141b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a  lse{.          z
141c0 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65  Hdr += sqlite3Ge
141d0 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20  tVarint32(zHdr, 
141e0 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  &t);.          o
141f0 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
14200 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14210 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
14220 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54  }.        pC->aT
14230 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20  ype[i++] = t;.  
14240 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
14250 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36   = (u32)(offset6
14260 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b  4 & 0xffffffff);
14270 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69  .      }while( i
14280 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
14290 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43  dHdr );.      pC
142a0 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
142b0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
142c0 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
142d0 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
142e0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
142f0 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62  ==0 ) sqlite3Vdb
14300 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
14310 6d 29 3b 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20  m);.  .      /* 
14320 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
14330 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
14340 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
14350 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
14360 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
14370 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
14380 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
14390 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
143a0 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
143b0 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
143c0 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
143d0 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
143e0 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
143f0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
14400 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
14410 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
14420 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
14430 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
14440 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
14450 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
14460 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
14470 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
14480 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
14490 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
144a0 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
144b0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
144c0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
144d0 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
144e0 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20  olumn_error;.   
144f0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
14500 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20 20        t = 0;.   
14510 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66   }..    /* If af
14520 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78  ter trying to ex
14530 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65  tract new entrie
14540 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65  s from the heade
14550 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73  r, nHdrParsed is
14560 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f  .    ** still no
14570 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74  t up to p2, that
14580 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
14590 72 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72  record has fewer
145a0 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20   than p2.    ** 
145b0 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65  columns.  So the
145c0 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20   result will be 
145d0 65 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75  either the defau
145e0 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55  lt value or a NU
145f0 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  LL..    */.    i
14600 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
14610 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69  d<=p2 ){.      i
14620 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
14630 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  P4_MEM ){.      
14640 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14650 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73  ShallowCopy(pDes
14660 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c  t, pOp->p4.pMem,
14670 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
14680 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14690 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
146a0 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
146b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
146c0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
146d0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
146e0 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54  {.    t = pC->aT
146f0 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20  ype[p2];.  }..  
14700 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63  /* Extract the c
14710 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70  ontent for the p
14720 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20  2+1-th column.  
14730 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79  Control can only
14740 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73  .  ** reach this
14750 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65   point if aOffse
14760 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70  t[p2], aOffset[p
14770 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54  2+1], and pC->aT
14780 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a  ype[p2] are.  **
14790 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f   all valid..  */
147a0 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
147b0 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a  ->nHdrParsed );.
147c0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
147d0 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73  LITE_OK );.  ass
147e0 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
147f0 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
14800 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69  ts(pDest) );.  i
14810 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  f( VdbeMemDynami
14820 63 28 70 44 65 73 74 29 20 29 20 73 71 6c 69 74  c(pDest) ) sqlit
14830 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
14840 28 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72  (pDest);.  asser
14850 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b  t( t==pC->aType[
14860 70 32 5d 20 29 3b 0a 20 20 70 44 65 73 74 2d 3e  p2] );.  pDest->
14870 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
14880 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e    if( pC->szRow>
14890 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29  =aOffset[p2+1] )
148a0 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  {.    /* This is
148b0 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
148c0 20 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72   where the desir
148d0 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20  ed content fits 
148e0 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  on the original.
148f0 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68      ** page - wh
14900 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ere the content 
14910 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65  is not on an ove
14920 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20  rflow page */.  
14930 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
14940 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d  ow + aOffset[p2]
14950 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20 29  ;.    if( t<12 )
14960 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
14970 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61  dbeSerialGet(zDa
14980 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ta, t, pDest);. 
14990 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
149a0 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  /* If the column
149b0 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
149c0 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70 65  ng, we need a pe
149d0 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c 20  rsistent value, 
149e0 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d  not.      ** a M
149f0 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e 20  EM_Ephem value. 
14a00 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20   This branch is 
14a10 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75 74  a fast short-cut
14a20 20 74 68 61 74 20 69 73 20 65 71 75 69 76 61 6c   that is equival
14a30 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20  ent.      ** to 
14a40 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56  calling sqlite3V
14a50 64 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 61  dbeSerialGet() a
14a60 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65  nd sqlite3VdbeDe
14a70 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a  ephemeralize()..
14a80 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
14a90 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20  tatic const u16 
14aa0 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f  aFlag[] = { MEM_
14ab0 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45  Blob, MEM_Str|ME
14ac0 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20  M_Term };.      
14ad0 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d  pDest->n = len =
14ae0 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20   (t-12)/2;.     
14af0 20 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61   if( pDest->szMa
14b00 6c 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a  lloc < len+2 ){.
14b10 20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66          pDest->f
14b20 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
14b30 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
14b40 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
14b50 70 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29  pDest, len+2, 0)
14b60 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
14b70 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14b80 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20       pDest->z = 
14b90 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a  pDest->zMalloc;.
14ba0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
14bb0 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a  mcpy(pDest->z, z
14bc0 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20  Data, len);.    
14bd0 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20    pDest->z[len] 
14be0 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
14bf0 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a  ->z[len+1] = 0;.
14c00 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
14c10 67 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b  gs = aFlag[t&1];
14c20 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
14c30 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
14c40 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
14c50 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
14c60 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
14c70 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70  s */.    if( ((p
14c80 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
14c90 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41  _LENGTHARG|OPFLA
14ca0 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30  G_TYPEOFARG))!=0
14cb0 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28  .          && ((
14cc0 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
14cd0 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
14ce0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
14cf0 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20  G)!=0)).     || 
14d00 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64  (len = sqlite3Vd
14d10 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
14d20 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20  t))==0.    ){.  
14d30 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
14d40 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
14d50 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20  .      **    1. 
14d60 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
14d70 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20  ction,.      ** 
14d80 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68     2. the length
14d90 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
14da0 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64  X is a blob, and
14db0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20  .      **    3. 
14dc0 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c  if the content l
14dd0 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20  ength is zero.. 
14de0 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69       ** So we mi
14df0 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20  ght as well use 
14e00 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
14e10 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
14e20 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  g.      ** conte
14e30 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 2a 2f  nt from disk. */
14e40 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75 38  .      static u8
14e50 20 61 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a 20 54   aZero[8];  /* T
14e60 68 69 73 20 69 73 20 74 68 65 20 62 6f 67 75 73  his is the bogus
14e70 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20   content */.    
14e80 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
14e90 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c  ialGet(aZero, t,
14ea0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
14eb0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
14ec0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14ed0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
14ee0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
14ef0 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20  !pC->isTable,.  
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
14f30 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
14f40 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
14f50 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
14f60 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
14f70 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
14f80 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e  .        pDest->
14f90 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70  flags &= ~MEM_Ep
14fa0 68 65 6d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  hem;.      }.   
14fb0 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d   }.  }..op_colum
14fc0 6e 5f 6f 75 74 3a 0a 6f 70 5f 63 6f 6c 75 6d 6e  n_out:.op_column
14fd0 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45  _error:.  UPDATE
14fe0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
14ff0 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
15000 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
15010 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
15020 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
15030 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20  ffinity P1 P2 * 
15040 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
15050 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40  : affinity(r[P1@
15060 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79  P2]).**.** Apply
15070 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61   affinities to a
15080 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67   range of P2 reg
15090 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
150a0 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50  with P1..**.** P
150b0 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  4 is a string th
150c0 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
150d0 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74  ers long. The nt
150e0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
150f0 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
15100 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
15110 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
15120 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
15130 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65  or the nth.** me
15140 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65  mory cell in the
15150 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20   range..*/.case 
15160 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20  OP_Affinity: {. 
15170 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66   const char *zAf
15180 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65  finity;   /* The
15190 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
151a0 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61  applied */.  cha
151b0 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20  r cAff;         
151c0 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c        /* A singl
151d0 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61  e character of a
151e0 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41  ffinity */..  zA
151f0 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
15200 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  4.z;.  assert( z
15210 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20  Affinity!=0 );. 
15220 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
15230 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
15240 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
15250 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69  [pOp->p1];.  whi
15260 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41  le( (cAff = *(zA
15270 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29  ffinity++))!=0 )
15280 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
15290 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
152a0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
152b0 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
152c0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
152d0 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c  In1) );.    appl
152e0 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
152f0 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  cAff, encoding);
15300 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
15310 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15320 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f  Opcode: MakeReco
15330 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  rd P1 P2 P3 P4 *
15340 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
15350 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50  P3]=mkrec(r[P1@P
15360 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72  2]).**.** Conver
15370 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62  t P2 registers b
15380 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31  eginning with P1
15390 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72   into the [recor
153a0 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65  d format].** use
153b0 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
153c0 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
153d0 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
153e0 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
153f0 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
15400 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
15410 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
15420 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ter..**.** P4 ma
15430 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
15440 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
15450 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e  ers long.  The n
15460 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
15470 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
15480 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
15490 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
154a0 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
154b0 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66  for the nth.** f
154c0 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65  ield of the inde
154d0 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  x key..**.** The
154e0 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68   mapping from ch
154f0 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e  aracter to affin
15500 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20  ity is given by 
15510 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a  the SQLITE_AFF_.
15520 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ** macros define
15530 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68  d in sqliteInt.h
15540 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
15550 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69   NULL then all i
15560 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65  ndex fields have
15570 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 42 4c   the affinity BL
15580 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  OB..*/.case OP_M
15590 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75  akeRecord: {.  u
155a0 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
155b0 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
155c0 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
155d0 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
155e0 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
155f0 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
15600 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
15610 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
15620 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
15630 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
15640 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
15650 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20   */.  int nHdr; 
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15670 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
15680 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
15690 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
156a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
156b0 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
156c0 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
156d0 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72  rd */.  i64 nZer
156e0 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  o;             /
156f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
15700 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
15710 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15720 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
15730 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
15740 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
15750 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
15760 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
15770 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
15780 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
15790 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
157a0 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
157b0 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
157c0 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
157d0 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
157e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
157f0 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
15800 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15810 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
15820 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15830 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
15840 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
15850 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
15860 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
15870 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
15880 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15890 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
158a0 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
158b0 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
158c0 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
158d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
158e0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
158f0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
15900 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20  header */.  int 
15910 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
15920 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
15930 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
15940 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75 33   content */.  u3
15950 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  2 len;          
15960 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
15970 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
15980 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
15990 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
159a0 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
159b0 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
159c0 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
159d0 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
159e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
159f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a20 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
15a30 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
15a40 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
15a50 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
15a60 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
15a70 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
15a80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15aa0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ab0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ac0 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
15ad0 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
15ae0 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
15af0 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
15b00 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
15b10 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72  .  ** and so for
15b20 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
15b30 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
15b40 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
15b50 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
15b60 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
15b70 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
15b80 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
15b90 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
15ba0 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
15bb0 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
15bc0 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
15bd0 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
15be0 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
15bf0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
15c00 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
15c10 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
15c20 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
15c30 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15c40 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
15c50 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
15c60 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
15c70 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15c80 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
15c90 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
15ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15cb0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
15cc0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
15cd0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
15ce0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
15cf0 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
15d00 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
15d10 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
15d20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
15d30 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d  ->p2+nField<=(p-
15d40 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
15d50 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20  )+1 );.  pData0 
15d60 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b  = &aMem[nField];
15d70 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
15d80 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26  >p2;.  pLast = &
15d90 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d  pData0[nField-1]
15da0 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ;.  file_format 
15db0 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  = p->minWriteFil
15dc0 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49  eFormat;..  /* I
15dd0 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70  dentify the outp
15de0 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20  ut register */. 
15df0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
15e00 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d  <pOp->p1 || pOp-
15e10 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70  >p3>=pOp->p1+pOp
15e20 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d  ->p2 );.  pOut =
15e30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
15e40 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
15e50 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
15e60 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65   /* Apply the re
15e70 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79  quested affinity
15e80 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20   to all inputs. 
15e90 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44   */.  assert( pD
15ea0 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
15eb0 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
15ec0 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61  {.    pRec = pDa
15ed0 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20  ta0;.    do{.   
15ee0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
15ef0 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69  (pRec++, *(zAffi
15f00 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e  nity++), encodin
15f10 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  g);.      assert
15f20 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d  ( zAffinity[0]==
15f30 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74  0 || pRec<=pLast
15f40 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20   );.    }while( 
15f50 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a  zAffinity[0] );.
15f60 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74    }..  /* Loop t
15f70 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
15f80 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
15f90 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
15fa0 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
15fb0 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
15fc0 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
15fd0 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
15fe0 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d  d..  */.  pRec =
15ff0 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20   pLast;.  do{.  
16000 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
16010 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
16020 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
16030 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71  serial_type = sq
16040 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
16050 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66  ype(pRec, file_f
16060 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20  ormat, &len);.  
16070 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
16080 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
16090 20 20 20 20 20 20 69 66 28 20 6e 44 61 74 61 20        if( nData 
160a0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
160b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
160c0 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20  andBlob(pRec) ) 
160d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
160e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
160f0 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d    nZero += pRec-
16100 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
16110 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75    len -= pRec->u
16120 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a  .nZero;.      }.
16130 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20      }.    nData 
16140 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74  += len;.    test
16150 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
16160 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65  e==127 );.    te
16170 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
16180 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20  ype==128 );.    
16190 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74  nHdr += serial_t
161a0 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73  ype<=127 ? 1 : s
161b0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
161c0 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
161d0 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63 29  }while( (--pRec)
161e0 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20 2f  >=pData0 );..  /
161f0 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
16200 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65  -22564-11647 The
16210 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77   header begins w
16220 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72  ith a single var
16230 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64  int.  ** which d
16240 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f  etermines the to
16250 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
16260 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65  tes in the heade
16270 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20  r. The varint.  
16280 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  ** value is the 
16290 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
162a0 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c  er in bytes incl
162b0 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
162c0 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c  arint.  ** itsel
162d0 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65  f. */.  testcase
162e0 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20  ( nHdr==126 );. 
162f0 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
16300 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48  =127 );.  if( nH
16310 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f  dr<=126 ){.    /
16320 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
16330 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d  e */.    nHdr +=
16340 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
16350 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66   /* Rare case of
16360 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20   a really large 
16370 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56  header */.    nV
16380 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56  arint = sqlite3V
16390 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a  arintLen(nHdr);.
163a0 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72      nHdr += nVar
163b0 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61  int;.    if( nVa
163c0 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
163d0 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48  ntLen(nHdr) ) nH
163e0 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
163f0 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a  e = nHdr+nData;.
16400 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72    if( nByte+nZer
16410 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  o>db->aLimit[SQL
16420 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
16430 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
16440 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
16450 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
16460 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
16470 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
16480 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
16490 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
164a0 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
164b0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
164c0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
164d0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
164e0 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
164f0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
16500 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
16510 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
16520 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
16530 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f  arAndResize() co
16540 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
16550 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
16560 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
16570 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16580 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
16590 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  e(pOut, (int)nBy
165a0 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  te) ){.    goto 
165b0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
165c0 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
165d0 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
165e0 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
165f0 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
16600 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
16610 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e  , nHdr);.  j = n
16620 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Hdr;.  assert( p
16630 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
16640 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
16650 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61  .  do{.    seria
16660 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75  l_type = pRec->u
16670 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49  Temp;.    /* EVI
16680 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32  DENCE-OF: R-0652
16690 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e  9-47362 Followin
166a0 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
166b0 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  t are one or mor
166c0 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f  e.    ** additio
166d0 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65  nal varints, one
166e0 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a   per column. */.
166f0 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
16700 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
16710 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
16720 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
16730 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
16740 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
16750 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32  OF: R-64536-5172
16760 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  8 The values for
16770 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
16780 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a  the record.    *
16790 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  * immediately fo
167a0 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e  llow the header.
167b0 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c   */.    j += sql
167c0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
167d0 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d  t(&zNewRecord[j]
167e0 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74  , pRec, serial_t
167f0 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74  ype); /* content
16800 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b   */.  }while( (+
16810 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b  +pRec)<=pLast );
16820 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48  .  assert( i==nH
16830 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  dr );.  assert( 
16840 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  j==nByte );..  a
16850 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
16860 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
16870 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
16880 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ) );.  pOut->n =
16890 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
168a0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
168b0 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65  _Blob;.  if( nZe
168c0 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ro ){.    pOut->
168d0 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b  u.nZero = nZero;
168e0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
168f0 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20   |= MEM_Zero;.  
16900 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  }.  pOut->enc = 
16910 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a  SQLITE_UTF8;  /*
16920 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f   In case the blo
16930 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72  b is ever conver
16940 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ted to text */. 
16950 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
16960 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
16970 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
16980 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
16990 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
169a0 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20  de: Count P1 P2 
169b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
169c0 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29  s: r[P2]=count()
169d0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
169e0 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
169f0 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76  es (an integer v
16a00 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62  alue) in the tab
16a10 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20  le or index .** 
16a20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
16a30 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20   P1 in register 
16a40 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  P2.*/.#ifndef SQ
16a50 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
16a60 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75  OUNT.case OP_Cou
16a70 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  nt: {         /*
16a80 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e   out2 */.  i64 n
16a90 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f  Entry;.  BtCurso
16aa0 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73  r *pCrsr;..  ass
16ab0 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
16ac0 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65  p->p1]->eCurType
16ad0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
16ae0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  );.  pCrsr = p->
16af0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
16b00 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
16b10 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
16b20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a   nEntry = 0;  /*
16b30 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
16b40 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
16b50 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
16b60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
16b70 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
16b80 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75   &nEntry);.  pOu
16b90 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
16ba0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
16bb0 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
16bc0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
16bd0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
16be0 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
16bf0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
16c00 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
16c10 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
16c20 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
16c30 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
16c40 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
16c50 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
16c60 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
16c70 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
16c80 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
16c90 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
16ca0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
16cb0 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
16cc0 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
16cd0 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
16ce0 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
16cf0 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
16d20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
16d30 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d50 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
16d60 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
16d70 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
16d80 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
16d90 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
16da0 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
16db0 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
16dc0 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
16dd0 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
16de0 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
16df0 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
16e00 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
16e10 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
16e20 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
16e30 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
16e40 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
16e50 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
16e60 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
16e70 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
16e80 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
16e90 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
16ea0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
16eb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
16ec0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
16ed0 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
16ee0 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
16ef0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
16f00 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
16f10 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
16f20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16f30 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
16f40 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
16f50 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
16f60 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  db) );.  assert(
16f70 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
16f80 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
16f90 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
16fa0 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65     if( db->nVdbe
16fb0 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
16fc0 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f   /* A new savepo
16fd0 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  int cannot be cr
16fe0 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61  eated if there a
16ff0 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20  re active write 
17000 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d  .      ** statem
17010 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20  ents (i.e. open 
17020 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65  read/write incre
17030 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64  mental blob hand
17040 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  les)..      */. 
17050 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
17060 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
17070 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
17080 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
17090 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
170a0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
170b0 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
170c0 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d  e{.      nName =
170d0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
170e0 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65  (zName);..#ifnde
170f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
17100 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20  RTUALTABLE.     
17110 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73   /* This call is
17120 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73   Ok even if this
17130 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63   savepoint is ac
17140 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63  tually a transac
17150 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61  tion.      ** sa
17160 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65  vepoint (and the
17170 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f  refore should no
17180 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f  t prompt xSavepo
17190 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73  int()) callbacks
171a0 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68  ..      ** If th
171b0 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
171c0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65  ion savepoint be
171d0 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69  ing opened, it i
171e0 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20  s guaranteed.   
171f0 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64     ** that the d
17200 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72  b->aVTrans[] arr
17210 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f  ay is empty.  */
17220 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
17230 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
17240 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d   || db->nVTrans=
17250 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  =0 );.      rc =
17260 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
17270 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
17280 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20  INT_BEGIN,.     
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e             db->n
172b0 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53  Statement+db->nS
172c0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
172d0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
172e0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
172f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
17300 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43  ndif..      /* C
17310 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65  reate a new save
17320 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e  point structure.
17330 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d   */.      pNew =
17340 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
17350 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  Raw(db, sizeof(S
17360 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
17370 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
17380 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
17390 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
173a0 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
173b0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
173c0 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
173d0 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
173e0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
173f0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
17400 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
17410 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
17420 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
17430 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
17440 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
17450 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
17460 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
17470 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17480 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
17490 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
174a0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
174b0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
174c0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
174d0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
174e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20          }.    . 
174f0 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74         /* Link t
17500 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74  he new savepoint
17510 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
17520 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74  se handle's list
17530 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65  . */.        pNe
17540 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70  w->pNext = db->p
17550 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
17560 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
17570 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20  t = pNew;.      
17580 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
17590 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  dCons = db->nDef
175a0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
175b0 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
175c0 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  edImmCons = db->
175d0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
175e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
175f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61    }else{.    iSa
17600 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20  vepoint = 0;..  
17610 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61    /* Find the na
17620 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  med savepoint. I
17630 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75  f there is no su
17640 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68  ch savepoint, th
17650 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20  en an.    ** an 
17660 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
17670 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20  d to the user.  
17680 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20  */.    for(.    
17690 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    pSavepoint = d
176a0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a  b->pSavepoint; .
176b0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
176c0 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43   && sqlite3StrIC
176d0 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a  mp(pSavepoint->z
176e0 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20  Name, zName);.  
176f0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
17700 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17710 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  xt.    ){.      
17720 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  iSavepoint++;.  
17730 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61    }.    if( !pSa
17740 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
17750 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
17760 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61  r(p, "no such sa
17770 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
17780 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
17790 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
177a0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d     }else if( db-
177b0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26  >nVdbeWrite>0 &&
177c0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
177d0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
177e0 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
177f0 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
17800 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
17810 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
17820 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
17830 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
17840 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ents..      */. 
17850 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
17860 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
17870 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69   release savepoi
17880 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  nt - ".         
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
178b0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
178c0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
178d0 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
178e0 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74  e{..      /* Det
178f0 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
17900 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20  r not this is a 
17910 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
17920 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20  point. If so,.  
17930 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20      ** and this 
17940 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  is a RELEASE com
17950 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63  mand, then the c
17960 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
17970 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  on .      ** is 
17980 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20  committed. .    
17990 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69    */.      int i
179a0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70  sTransaction = p
179b0 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
179c0 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61  ==0 && db->isTra
179d0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
179e0 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54  t;.      if( isT
179f0 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31  ransaction && p1
17a00 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
17a10 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ASE ){.        i
17a20 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
17a30 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
17a40 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
17a50 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
17a60 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17a70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
17a80 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17a90 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
17aa0 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
17ab0 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
17ac0 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70  {.          p->p
17ad0 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
17ae0 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20  aOp);.          
17af0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17b00 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
17b10 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
17b20 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
17b30 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17b40 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
17b50 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
17b60 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
17b70 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
17b80 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
17b90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
17ba0 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  nt isSchemaChang
17bb0 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e;.        iSave
17bc0 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
17bd0 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
17be0 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
17bf0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
17c00 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
17c10 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
17c20 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66  aChange = (db->f
17c30 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e  lags & SQLITE_In
17c40 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b  ternChanges)!=0;
17c50 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69  .          for(i
17c60 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
17c70 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
17c80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17c90 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
17ca0 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
17cb0 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pBt,.           
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
17ce0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
17cf0 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K,.             
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
17d20 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20  maChange==0);.  
17d30 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
17d40 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
17d50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17d60 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
17d70 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
17d80 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  {.          isSc
17d90 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a  hemaChange = 0;.
17da0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17db0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
17dc0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
17dd0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
17de0 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
17df0 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
17e00 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
17e10 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
17e20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17e30 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
17e40 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17e50 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
17e60 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
17e70 20 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63          if( isSc
17e80 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20  hemaChange ){.  
17e90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
17ea0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
17eb0 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
17ec0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
17ed0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
17ee0 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
17ef0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61           db->fla
17f00 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20  gs = (db->flags 
17f10 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  | SQLITE_InternC
17f20 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20  hanges);.       
17f30 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
17f40 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
17f50 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
17f60 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
17f70 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
17f80 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
17f90 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
17fa0 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
17fb0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
17fc0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
17fd0 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
17fe0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
17ff0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
18000 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
18010 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
18020 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
18030 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
18040 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
18050 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
18060 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
18070 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
18080 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
18090 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
180a0 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
180b0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
180c0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
180d0 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
180e0 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
180f0 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
18100 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
18110 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
18120 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
18130 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
18140 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
18150 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
18160 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
18170 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
18180 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
18190 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
181a0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
181b0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
181c0 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
181d0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
181e0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
181f0 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
18200 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
18210 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
18220 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
18230 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
18240 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
18250 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
18260 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
18270 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
18280 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
18290 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
182a0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
182b0 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
182c0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
182d0 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65  dImmCons = pSave
182e0 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
182f0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
18300 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54  ..      if( !isT
18310 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31  ransaction || p1
18320 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
18330 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
18340 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
18350 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31  Savepoint(db, p1
18360 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
18370 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
18380 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
18390 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
183a0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
183b0 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a  }.  }..  break;.
183c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
183d0 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
183e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
183f0 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
18400 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
18410 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
18420 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
18430 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
18440 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
18450 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
18460 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
18470 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
18480 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
18490 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
184a0 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
184b0 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
184c0 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
184d0 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
184e0 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
184f0 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
18500 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  cache..**.** Thi
18510 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
18520 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
18530 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
18540 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
18550 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
18560 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f  ommit;.  int iRo
18570 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75  llback;.  int tu
18580 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72  rnOnAC;..  desir
18590 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70  edAutoCommit = p
185a0 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62  Op->p1;.  iRollb
185b0 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
185c0 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69   turnOnAC = desi
185d0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26  redAutoCommit &&
185e0 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
185f0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
18600 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
18610 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43   || desiredAutoC
18620 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
18630 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
18640 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52  oCommit==1 || iR
18650 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20  ollback==0 );.  
18660 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62  assert( db->nVdb
18670 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a  eActive>0 );  /*
18680 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f   At least this o
18690 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20  ne VM is active 
186a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
186b0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
186c0 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
186d0 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62  !iRollback && db
186e0 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
186f0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
18700 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
18710 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
18720 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
18730 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
18740 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
18750 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
18760 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
18770 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
18780 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
18790 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
187a0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d  r(p, "cannot com
187b0 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
187c0 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
187d0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
187e0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
187f0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
18800 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18810 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73  .  }else if( des
18820 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
18830 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
18840 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
18850 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
18860 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
18870 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
18880 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
18890 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
188a0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
188b0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
188c0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
188d0 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
188e0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
188f0 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
18900 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
18910 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18920 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
18930 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
18940 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
18950 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20  oCommit;.    }. 
18960 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
18970 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
18980 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
18990 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
189a0 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
189b0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
189c0 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
189d0 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
189e0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
189f0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
18a00 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
18a10 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73  rn;.    }.    as
18a20 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
18a30 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
18a40 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
18a50 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
18a60 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
18a70 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
18a80 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
18a90 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18aa0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
18ab0 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
18ac0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18ad0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
18ae0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
18af0 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
18b00 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
18b10 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
18b20 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
18b30 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
18b40 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62  .        (iRollb
18b50 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c  ack)?"cannot rol
18b60 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
18b70 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
18b80 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ":.             
18b90 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f        "cannot co
18ba0 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
18bb0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
18bc0 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20  ));.         .  
18bd0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
18be0 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ROR;.  }.  break
18bf0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18c00 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50  Transaction P1 P
18c10 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
18c20 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63   Begin a transac
18c30 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65  tion on database
18c40 20 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63   P1 if a transac
18c50 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65  tion is not alre
18c60 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a  ady.** active..*
18c70 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
18c80 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
18c90 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
18ca0 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20   started, or if 
18cb0 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73  a .** read-trans
18cc0 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64  action is alread
18cd0 79 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20  y active, it is 
18ce0 75 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72  upgraded to a wr
18cf0 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ite-transaction.
18d00 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
18d10 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74  o, then a read-t
18d20 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
18d30 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  arted..**.** P1 
18d40 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
18d50 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
18d60 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
18d70 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
18d80 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
18d90 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
18da0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
18db0 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
18dc0 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
18dd0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18de0 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
18df0 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
18e00 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
18e10 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
18e20 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
18e30 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18e40 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
18e50 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
18e60 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
18e70 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
18e80 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
18e90 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
18ea0 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
18eb0 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
18ec0 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
18ed0 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
18ee0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
18ef0 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
18f00 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
18f10 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
18f20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
18f30 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
18f40 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
18f50 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
18f60 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
18f70 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
18f80 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
18f90 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
18fa0 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
18fb0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
18fc0 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
18fd0 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
18fe0 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
18ff0 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
19000 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
19010 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
19020 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
19030 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
19040 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
19050 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
19060 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19070 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
19080 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
19090 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
190a0 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
190b0 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20  P5!=0 then this 
190c0 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63  opcode also chec
190d0 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks the schema co
190e0 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a  okie against P3.
190f0 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d  ** and the schem
19100 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  a generation cou
19110 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e  nter against P4.
19120 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
19130 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
19140 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
19150 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
19160 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
19170 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
19180 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
19190 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
191a0 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
191b0 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
191c0 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
191d0 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
191e0 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20  schema.  If the 
191f0 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65  schema.** cookie
19200 20 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66   in P3 differs f
19210 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63  rom the schema c
19220 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74  ookie in the dat
19230 61 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a  abase header or.
19240 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  ** if the schema
19250 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
19260 74 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72  ter in P4 differ
19270 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  s from the curre
19280 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e  nt.** generation
19290 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61   counter, then a
192a0 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  n SQLITE_SCHEMA 
192b0 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20  error is raised 
192c0 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a  and execution.**
192d0 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c   halts.  The sql
192e0 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70  ite3_step() wrap
192f0 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67  per function mig
19300 68 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72  ht then reprepar
19310 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65  e the.** stateme
19320 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20  nt and rerun it 
19330 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
19340 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ng..*/.case OP_T
19350 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
19360 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e  Btree *pBt;.  in
19370 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
19380 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Gen;..  assert( 
19390 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
193a0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
193b0 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d  dOnly==0 || pOp-
193c0 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p2==0 );.  asse
193d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
193e0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
193f0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
19400 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
19410 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
19420 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
19430 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20  2 && (db->flags 
19440 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  & SQLITE_QueryOn
19450 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  ly)!=0 ){.    rc
19460 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e   = SQLITE_READON
19470 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  LY;.    goto abo
19480 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19490 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d  .  }.  pBt = db-
194a0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
194b0 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b  t;..  if( pBt ){
194c0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
194d0 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
194e0 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  (pBt, pOp->p2);.
194f0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
19500 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e  ==SQLITE_BUSY_SN
19510 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65  APSHOT );.    te
19520 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
19530 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59  TE_BUSY_RECOVERY
19540 20 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26   );.    if( (rc&
19550 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55  0xff)==SQLITE_BU
19560 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
19570 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
19580 61 4f 70 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72  aOp);.      p->r
19590 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 67 6f  c = rc;.      go
195a0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
195b0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
195c0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
195d0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
195e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
195f0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
19600 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
19610 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
19620 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
19630 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
19640 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20  dbeRead>1) .    
19650 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
19660 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
19670 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
19680 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
19690 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
196a0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
196b0 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
196c0 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
196d0 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
196e0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
196f0 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
19700 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
19710 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
19720 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
19730 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
19740 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
19750 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
19760 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
19770 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
19780 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19790 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
197a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
197b0 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
197c0 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
197d0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
197e0 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
197f0 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
19800 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
19810 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
19820 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
19830 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
19840 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
19850 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
19860 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
19870 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
19880 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
19890 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
198a0 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
198b0 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
198c0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
198d0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d  edCons;.      p-
198e0 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73  >nStmtDefImmCons
198f0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
19900 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a  ImmCons;.    }..
19910 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68      /* Gather th
19920 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
19930 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63   number for chec
19940 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50  king:.    ** IMP
19950 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
19960 52 2d 33 32 31 39 35 2d 31 39 34 36 35 20 54 68  R-32195-19465 Th
19970 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
19980 20 69 73 20 75 73 65 64 20 62 79 20 53 51 4c 69   is used by SQLi
19990 74 65 0a 20 20 20 20 2a 2a 20 65 61 63 68 20 74  te.    ** each t
199a0 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65  ime a query is e
199b0 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72  xecuted to ensur
199c0 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72  e that the inter
199d0 6e 61 6c 20 63 61 63 68 65 20 6f 66 20 74 68 65  nal cache of the
199e0 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 75  .    ** schema u
199f0 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69  sed when compili
19a00 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79  ng the SQL query
19a10 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68   matches the sch
19a20 65 6d 61 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ema of the.    *
19a30 2a 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  * database again
19a40 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
19a50 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
19a60 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
19a70 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
19a80 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
19a90 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45  (pBt, BTREE_SCHE
19aa0 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32  MA_VERSION, (u32
19ab0 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20   *)&iMeta);.    
19ac0 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70  iGen = db->aDb[p
19ad0 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
19ae0 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20  >iGeneration;.  
19af0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20  }else{.    iGen 
19b00 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d  = iMeta = 0;.  }
19b10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19b20 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  p5==0 || pOp->p4
19b30 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
19b40 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
19b50 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  && (iMeta!=pOp->
19b60 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p3 || iGen!=pOp-
19b70 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71  >p4.i) ){.    sq
19b80 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
19b90 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
19ba0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
19bb0 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
19bc0 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
19bd0 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
19be0 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
19bf0 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
19c00 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
19c10 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
19c20 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
19c30 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
19c40 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
19c50 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
19c60 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
19c70 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
19c80 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
19c90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
19ca0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
19cb0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
19cc0 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
19cd0 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
19ce0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
19cf0 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
19d00 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
19d10 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
19d20 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
19d30 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
19d40 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
19d50 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
19d60 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
19d70 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
19d80 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
19d90 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
19da0 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
19db0 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
19dc0 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
19dd0 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
19de0 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
19df0 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
19e00 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
19e10 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
19e20 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
19e30 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
19e40 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
19e50 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
19e60 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
19e70 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
19e80 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
19e90 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
19ea0 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
19eb0 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
19ec0 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
19ed0 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
19ee0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
19ef0 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
19f00 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
19f10 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
19f20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  1);.    }.    p-
19f30 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
19f40 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
19f50 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61  HEMA;.  }.  brea
19f60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19f70 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
19f80 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
19f90 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
19fa0 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
19fb0 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
19fc0 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
19fd0 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
19fe0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
19ff0 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
1a000 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1a010 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
1a020 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1a030 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
1a040 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1a050 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
1a060 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1a070 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1a080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1a090 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1a0a0 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1a0b0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
1a0c0 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
1a0d0 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
1a0e0 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
1a0f0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
1a100 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
1a110 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
1a120 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
1a130 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
1a140 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1a150 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1a160 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a180 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
1a190 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
1a1a0 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
1a1b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1a1c0 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
1a1d0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
1a1e0 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1a1f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a200 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
1a210 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1a220 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1a230 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a240 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
1a250 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
1a260 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1a270 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1a280 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74  iDb) );..  sqlit
1a290 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
1a2a0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1a2b0 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
1a2c0 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
1a2d0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
1a2e0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
1a2f0 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
1a300 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1a310 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
1a320 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1a330 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f  .** Write the co
1a340 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1a350 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65  r P3 (interprete
1a360 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29  d as an integer)
1a370 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20  .** into cookie 
1a380 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
1a390 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31  abase P1.  P2==1
1a3a0 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
1a3b0 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d  ersion.  .** P2=
1a3c0 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1a3d0 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33  se format. P2==3
1a3e0 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
1a3f0 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
1a400 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  .** size, and so
1a410 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1a420 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
1a430 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
1a440 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61  =1 is the .** da
1a450 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1a460 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
1a470 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
1a480 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
1a490 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
1a4a0 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67  before executing
1a4b0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1a4c0 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b  .case OP_SetCook
1a4d0 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  ie: {       /* i
1a4e0 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b  n3 */.  Db *pDb;
1a4f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a500 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
1a510 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
1a520 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1a530 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
1a540 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1a550 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1a560 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
1a570 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1a580 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1a590 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
1a5a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1a5b0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
1a5c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
1a5d0 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1a5e0 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
1a5f0 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d  , 0) );.  pIn3 =
1a600 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1a610 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
1a620 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
1a630 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
1a640 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
1a650 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
1a660 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
1a670 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
1a680 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
1a690 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
1a6a0 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
1a6b0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1a6c0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
1a6d0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
1a6e0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1a6f0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
1a700 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
1a710 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
1a720 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1a730 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
1a740 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
1a750 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
1a760 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
1a770 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
1a780 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
1a790 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
1a7a0 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
1a7b0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
1a7c0 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
1a7d0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1a7e0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
1a7f0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
1a800 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
1a810 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
1a820 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
1a830 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
1a840 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
1a850 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
1a860 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
1a870 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
1a880 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
1a890 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
1a8a0 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
1a8b0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
1a8c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1a8d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1a8e0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34  Read P1 P2 P3 P4
1a8f0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1a900 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1a910 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1a920 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
1a930 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
1a940 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
1a950 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
1a960 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
1a970 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
1a980 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
1a990 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
1a9a0 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
1a9b0 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
1a9c0 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
1a9d0 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
1a9e0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
1a9f0 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
1aa00 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
1aa10 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
1aa20 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
1aa30 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
1aa40 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
1aa50 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
1aa60 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
1aa70 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
1aa80 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
1aa90 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
1aaa0 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
1aab0 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
1aac0 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
1aad0 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
1aae0 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
1aaf0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1ab00 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
1ab10 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
1ab20 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
1ab30 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
1ab40 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
1ab50 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
1ab60 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
1ab70 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
1ab80 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
1ab90 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
1aba0 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
1abb0 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
1abc0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
1abd0 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
1abe0 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
1abf0 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
1ac00 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
1ac10 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
1ac20 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
1ac30 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
1ac40 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
1ac50 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
1ac60 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
1ac70 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
1ac80 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
1ac90 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
1aca0 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
1acb0 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
1acc0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
1acd0 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
1ace0 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
1acf0 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
1ad00 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
1ad10 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
1ad20 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
1ad30 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
1ad40 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
1ad50 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
1ad60 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
1ad70 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
1ad80 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1ad90 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
1ada0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
1adb0 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
1adc0 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
1add0 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
1ade0 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
1adf0 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
1ae00 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
1ae10 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
1ae20 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
1ae30 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1ae40 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1ae50 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
1ae60 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
1ae70 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1ae80 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  he table..**.** 
1ae90 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72  See also: OpenWr
1aea0 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a  ite, ReopenIdx.*
1aeb0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f  /./* Opcode: Reo
1aec0 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20  penIdx P1 P2 P3 
1aed0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1aee0 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1aef0 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  3.**.** The Reop
1af00 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72  enIdx opcode wor
1af10 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
1af20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20  ReadOpen except 
1af30 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a  that it first.**
1af40 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
1af50 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20  f the cursor on 
1af60 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  P1 is already op
1af70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70  en with a root p
1af80 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  age.** number of
1af90 20 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73   P2 and if it is
1afa0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63   this opcode bec
1afb0 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49  omes a no-op.  I
1afc0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a  n other words,.*
1afd0 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  * if the cursor 
1afe0 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c  is already open,
1aff0 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69   do not reopen i
1b000 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  t..**.** The Reo
1b010 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61  penIdx opcode ma
1b020 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77  y only be used w
1b030 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69  ith P5==0 and wi
1b040 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61  th P4 being.** a
1b050 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65   P4_KEYINFO obje
1b060 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65  ct.  Furthermore
1b070 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d  , the P3 value m
1b080 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
1b090 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65  as.** every othe
1b0a0 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f  r ReopenIdx or O
1b0b0 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20  penRead for the 
1b0c0 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  same cursor numb
1b0d0 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68  er..**.** See th
1b0e0 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64  e OpenRead opcod
1b0f0 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
1b100 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
1b110 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
1b120 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72  * Opcode: OpenWr
1b130 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ite P1 P2 P3 P4 
1b140 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b150 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1b160 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1b170 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
1b180 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
1b190 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
1b1a0 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
1b1b0 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35  is P2.  Or if P5
1b1c0 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74  !=0 use the cont
1b1d0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1b1e0 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a  P2 to find the.*
1b1f0 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a  * root page..**.
1b200 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1b210 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1b220 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1b230 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1b240 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1b250 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1b260 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1b270 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1b280 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
1b290 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
1b2a0 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
1b2b0 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
1b2c0 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
1b2d0 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
1b2e0 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
1b2f0 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
1b300 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1b310 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1b320 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
1b330 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1b340 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ns in the table,
1b350 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61   or to the.** la
1b360 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61  rgest index of a
1b370 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ny column of the
1b380 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61   table that is a
1b390 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a  ctually used..**
1b3a0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1b3b0 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20  tion works just 
1b3c0 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78  like OpenRead ex
1b3d0 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1b3e0 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a  ns the cursor.**
1b3f0 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d   in read/write m
1b400 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65  ode.  For a give
1b410 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63  n table, there c
1b420 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  an be one or mor
1b430 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63  e read-only.** c
1b440 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67  ursors or a sing
1b450 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75  le read/write cu
1b460 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74  rsor but not bot
1b470 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  h..**.** See als
1b480 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63  o OpenRead..*/.c
1b490 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  ase OP_ReopenIdx
1b4a0 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
1b4b0 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1b4c0 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b  yInfo;.  int p2;
1b4d0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1b4e0 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
1b4f0 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
1b500 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
1b510 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pDb;..  assert(
1b520 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1b530 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53  Op->p5==OPFLAG_S
1b540 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72  EEKEQ );.  asser
1b550 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1b560 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20  P4_KEYINFO );.  
1b570 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
1b580 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
1b590 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67  pCur && pCur->pg
1b5a0 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70  noRoot==(u32)pOp
1b5b0 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65  ->p2 ){.    asse
1b5c0 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70  rt( pCur->iDb==p
1b5d0 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f  Op->p3 );      /
1b5e0 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20  * Guaranteed by 
1b5f0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1b600 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f  or */.    goto o
1b610 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68  pen_cursor_set_h
1b620 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49  ints;.  }.  /* I
1b630 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1b640 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  not currently op
1b650 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e  en or is open on
1b660 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a   a different.  *
1b670 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61  * index, then fa
1b680 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
1b690 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66  OP_OpenRead to f
1b6a0 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f  orce a reopen */
1b6b0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
1b6c0 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
1b6d0 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28  rite:..  assert(
1b6e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1b6f0 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f  _OpenWrite || pO
1b700 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1b710 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b  >p5==OPFLAG_SEEK
1b720 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EQ );.  assert( 
1b730 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1b740 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1b750 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65  pcode==OP_OpenRe
1b760 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ad || pOp->opcod
1b770 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a  e==OP_ReopenIdx.
1b780 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e            || p->
1b790 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
1b7a0 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
1b7b0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1b7c0 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
1b7d0 43 4b 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  CK;.    break;. 
1b7e0 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1b7f0 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1b800 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1b810 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1b820 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1b830 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1b840 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1b850 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1b860 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1b870 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
1b880 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
1b890 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
1b8a0 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
1b8b0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1b8c0 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
1b8d0 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41     assert( OPFLA
1b8e0 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52  G_FORDELETE==BTR
1b8f0 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a  EE_FORDELETE );.
1b900 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52      wrFlag = BTR
1b910 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d  EE_WRCSR | (pOp-
1b920 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  >p5 & OPFLAG_FOR
1b930 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73  DELETE);.    ass
1b940 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1b950 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1b960 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1b970 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1b980 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1b990 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1b9a0 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1b9b0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1b9c0 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1b9d0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1b9e0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1b9f0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1ba00 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1ba10 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1ba20 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1ba30 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1ba40 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1ba50 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
1ba60 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1ba70 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1ba80 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1ba90 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1baa0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1bab0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1bac0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1bad0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1bae0 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1baf0 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1bb00 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1bb10 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1bb20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1bb30 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1bb40 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1bb50 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1bb60 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1bb70 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1bb80 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1bb90 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1bba0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1bbb0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1bbc0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1bbd0 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1bbe0 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1bbf0 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1bc00 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e  on. */.    if( N
1bc10 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20  EVER(p2<2) ) {. 
1bc20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1bc30 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
1bc40 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1bc50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1bc60 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f    }.  }.  if( pO
1bc70 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1bc80 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
1bc90 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1bca0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73  pKeyInfo;.    as
1bcb0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1bcc0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1bcd0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1bce0 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1bcf0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1bd00 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b  yInfo->nField+pK
1bd10 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b  eyInfo->nXField;
1bd20 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1bd30 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1bd40 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1bd50 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1bd60 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1bd70 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1bd80 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1bd90 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1bda0 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1bdb0 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1bdc0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1bdd0 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1bde0 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1bdf0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1be00 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1be10 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1be20 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1be30 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1be40 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1be50 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1be60 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75  dered = 1;.  pCu
1be70 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32  r->pgnoRoot = p2
1be80 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1be90 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72  DEBUG.  pCur->wr
1bea0 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23  Flag = wrFlag;.#
1beb0 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
1bec0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1bed0 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1bee0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1bef0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  uc.pCursor);.  p
1bf00 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1bf10 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53  pKeyInfo;.  /* S
1bf20 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
1bf30 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62  r.isTable variab
1bf40 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  le. Previous ver
1bf50 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1bf60 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
1bf70 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
1bf80 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
1bf90 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
1bfa0 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
1bfb0 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
1bfc0 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
1bfd0 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
1bfe0 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
1bff0 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
1c000 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
1c010 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
1c020 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
1c030 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
1c040 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  O;..open_cursor_
1c050 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73  set_hints:.  ass
1c060 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
1c070 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
1c080 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  OAD );.  assert(
1c090 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d   OPFLAG_SEEKEQ==
1c0a0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b  BTREE_SEEK_EQ );
1c0b0 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
1c0c0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
1c0d0 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20  LKCSR );.#ifdef 
1c0e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
1c0f0 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73  RSOR_HINTS.  tes
1c100 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26  tcase( pOp->p2 &
1c110 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29   OPFLAG_SEEKEQ )
1c120 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
1c130 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1c140 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e  tFlags(pCur->uc.
1c150 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20  pCursor,.       
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
1c180 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43   & (OPFLAG_BULKC
1c190 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1c1a0 29 29 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  )));.  break;.}.
1c1b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c1c0 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1c1d0 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1c1e0 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1c1f0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1c200 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1c210 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1c220 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1c230 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1c240 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1c250 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1c260 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1c270 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1c280 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1c290 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1c2a0 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1c2b0 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1c2c0 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1c2d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1c2e0 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1c2f0 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1c300 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1c310 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1c320 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1c330 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1c340 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1c350 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1c360 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1c370 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1c380 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1c390 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1c3a0 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1c3b0 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1c3c0 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1c3d0 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1c3e0 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1c3f0 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1c400 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1c410 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1c420 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1c430 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1c440 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1c450 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c460 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1c470 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1c480 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1c490 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1c4a0 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1c4b0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1c4c0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1c4d0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1c4e0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1c4f0 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1c500 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1c510 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1c520 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1c530 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1c540 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1c550 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1c560 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1c570 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1c580 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1c590 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1c5a0 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1c5b0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1c5c0 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1c5d0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1c5e0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1c5f0 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1c600 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1c610 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1c620 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1c630 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1c640 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1c650 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1c660 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1c670 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1c680 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c690 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1c6a0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1c6b0 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1c6c0 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1c6d0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1c6e0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1c6f0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1c700 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1c710 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1c720 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  1, CURTYPE_BTREE
1c730 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1c740 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1c750 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1c760 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1c770 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20  meral = 1;.  rc 
1c780 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1c790 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1c7a0 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7c0 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1c7d0 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1c7e0 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1c7f0 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1c800 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1c810 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1c820 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1c830 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1c840 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1c850 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1c860 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1c870 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1c880 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1c890 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1c8a0 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1c8b0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1c8c0 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1c8d0 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1c8e0 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1c8f0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1c900 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1c910 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1c920 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1c930 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1c940 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1c950 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1c960 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1c970 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1c980 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1c990 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1c9a0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1c9b0 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1c9c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1c9d0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1c9e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c9f0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1ca00 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1ca10 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1ca20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1ca30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1ca40 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1ca50 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1ca60 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1ca70 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1ca80 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1ca90 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1caa0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1cab0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1cac0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1cad0 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1cae0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1caf0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1cb00 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 42 54 52  ->pBt, pgno, BTR
1cb10 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e            pKeyIn
1cb40 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  fo, pCx->uc.pCur
1cb50 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1cb60 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1cb70 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1cb80 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1cb90 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1cba0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1cbb0 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53  ROOT, BTREE_WRCS
1cbc0 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72   0, pCx->uc.pCur
1cbf0 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1cc00 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1cc10 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
1cc20 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1cc30 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1cc40 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ERED);.  break;.
1cc50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1cc60 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50  rterOpen P1 P2 P
1cc70 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  3 P4 *.**.** Thi
1cc80 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
1cc90 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
1cca0 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
1ccb0 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
1ccc0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
1ccd0 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
1cce0 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
1ccf0 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
1cd00 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
1cd10 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
1cd20 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a  t algorithm..**.
1cd30 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50  ** If argument P
1cd40 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
1cd50 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73  hen it indicates
1cd60 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72   that the sorter
1cd70 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74   may.** assume t
1cd80 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72  hat a stable sor
1cd90 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68  t considering th
1cda0 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64  e first P3 field
1cdb0 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79  s of each.** key
1cdc0 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74   is sufficient t
1cdd0 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65  o produce the re
1cde0 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a  quired results..
1cdf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
1ce00 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
1ce10 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1ce20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1ce30 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1ce40 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1ce50 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1ce60 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1ce70 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52  pOp->p2, -1, CUR
1ce80 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20  TYPE_SORTER);.  
1ce90 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1cea0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1ceb0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
1cec0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1ced0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1cee0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1cef0 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1cf00 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1cf10 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d  NC(db) );.  rc =
1cf20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
1cf30 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e  erInit(db, pOp->
1cf40 70 33 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61  p3, pCx);.  brea
1cf50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1cf60 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31   SequenceTest P1
1cf70 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1cf80 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f  opsis: if( curso
1cf90 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63  r[P1].ctr++ ) pc
1cfa0 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69   = P2.**.** P1 i
1cfb0 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
1cfc0 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e  r. If the sequen
1cfd0 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75  ce counter is cu
1cfe0 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75  rrently zero, ju
1cff0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67  mp.** to P2. Reg
1d000 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
1d010 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75  er or not the ju
1d020 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63  mp is taken, inc
1d030 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68  rement the.** th
1d040 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65  e sequence value
1d050 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71  ..*/.case OP_Seq
1d060 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56  uenceTest: {.  V
1d070 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d080 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d090 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1d0a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1d0b0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1d0c0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1d0d0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
1d0e0 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43  .  if( (pC->seqC
1d0f0 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20  ount++)==0 ){.  
1d100 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
1d110 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
1d120 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1d130 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1d140 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1d150 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e  s: P3 columns in
1d160 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65   r[P2].**.** Ope
1d170 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
1d180 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
1d190 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
1d1a0 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
1d1b0 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
1d1c0 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  .  The content o
1d1d0 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  f that one row i
1d1e0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
1d1f0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73   memory.** regis
1d200 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65  ter P2.  In othe
1d210 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20  r words, cursor 
1d220 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  P1 becomes an al
1d230 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20  ias for the .** 
1d240 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74  MEM_Blob content
1d250 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65   contained in re
1d260 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1d270 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
1d280 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
1d290 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
1d2a0 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
1d2b0 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
1d2c0 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
1d2d0 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
1d2e0 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
1d2f0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
1d300 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
1d310 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
1d320 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
1d330 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
1d340 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
1d350 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
1d360 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
1d370 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1d380 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
1d390 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1d3a0 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
1d3b0 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
1d3c0 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
1d3d0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1d3e0 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
1d3f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1d400 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1d410 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1d420 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
1d430 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1d440 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1d450 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
1d460 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44  1, CURTYPE_PSEUD
1d470 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  O);.  if( pCx==0
1d480 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1d490 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1d4a0 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73   1;.  pCx->uc.ps
1d4b0 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70  eudoTableReg = p
1d4c0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
1d4d0 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73  sTable = 1;.  as
1d4e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1d4f0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1d500 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1d510 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1d520 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1d530 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1d540 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1d550 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1d560 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1d570 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1d580 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1d590 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1d5a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d5b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1d5c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1d5d0 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1d5e0 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1d5f0 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1d600 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1d610 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
1d620 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1d630 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
1d640 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  ASK./* Opcode: C
1d650 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20  olumnsUsed P1 * 
1d660 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
1d670 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20  s opcode (which 
1d680 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53  only exists if S
1d690 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c  QLite was compil
1d6a0 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  ed with.** SQLIT
1d6b0 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
1d6c0 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74  USED_MASK) ident
1d6d0 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75  ifies which colu
1d6e0 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61  mns of the.** ta
1d6f0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72  ble or index for
1d700 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75   cursor P1 are u
1d710 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34  sed.  P4 is a 64
1d720 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
1d730 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68  (P4_INT64) in wh
1d740 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33  ich the first 63
1d750 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f   bits are one fo
1d760 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a  r each of the.**
1d770 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e   first 63 column
1d780 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
1d790 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  r index that are
1d7a0 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a   actually used.*
1d7b0 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e  * by the cursor.
1d7c0 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72    The high-order
1d7d0 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61   bit is set if a
1d7e0 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a  ny column after.
1d7f0 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75  ** the 64th is u
1d800 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sed..*/.case OP_
1d810 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20  ColumnsUsed: {. 
1d820 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1d830 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1d840 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1d850 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1d860 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1d870 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73   );.  pC->maskUs
1d880 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d  ed = *(u64*)pOp-
1d890 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
1d8a0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
1d8b0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50  Opcode: SeekGE P
1d8c0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1d8d0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1d8e0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1d8f0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1d900 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1d910 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1d920 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1d930 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1d940 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1d950 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1d960 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1d970 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1d980 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1d990 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1d9a0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1d9b0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1d9c0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1d9d0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1d9e0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1d9f0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1da00 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1da10 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1da20 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1da30 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1da40 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1da50 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1da60 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1da70 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1da80 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1da90 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1daa0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1dab0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1dac0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
1dad0 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
1dae0 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
1daf0 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
1db00 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1db10 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1db20 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
1db30 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
1db40 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
1db50 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
1db60 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1db70 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
1db80 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
1db90 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
1dba0 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
1dbb0 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45  owed by an IdxLE
1dbc0 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
1dbd0 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
1dbe0 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70  .** The IdxLE op
1dbf0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
1dc00 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
1dc10 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
1dc20 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f  t the.** IdxLE o
1dc30 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1dc40 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
1dc50 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
1dc60 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1dc70 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1dc80 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1dc90 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1dca0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1dcb0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1dcc0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1dcd0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1dce0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1dcf0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1dd00 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1dd10 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1dd20 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1dd30 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1dd40 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1dd50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1dd60 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1dd70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1dd80 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1dd90 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1dda0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1ddb0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1ddc0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1ddd0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1dde0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1ddf0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1de00 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1de10 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1de20 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1de30 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1de40 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1de50 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1de60 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1de70 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1de80 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1de90 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1dea0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1deb0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1dec0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1ded0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1dee0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1def0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1df00 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1df10 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1df20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1df30 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1df40 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1df50 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1df60 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1df70 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1df80 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1df90 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1dfa0 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1dfb0 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1dfc0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1dfd0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1dfe0 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1dff0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1e000 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e010 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e020 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1e030 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1e040 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1e050 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1e060 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e070 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1e080 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1e090 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1e0a0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1e0b0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1e0c0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1e0d0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1e0e0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1e0f0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1e100 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1e110 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1e120 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1e130 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1e140 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1e150 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1e160 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1e170 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1e180 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1e190 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1e1a0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1e1b0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1e1c0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1e1d0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1e1e0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1e1f0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1e200 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1e210 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1e220 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1e230 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1e240 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1e250 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1e260 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1e270 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1e280 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1e290 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1e2a0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1e2b0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1e2c0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1e2d0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1e2e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1e2f0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1e300 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1e310 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1e320 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1e330 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1e340 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e350 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1e360 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1e370 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1e380 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1e390 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1e3a0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1e3b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1e3c0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1e3d0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1e3e0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1e3f0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1e400 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1e410 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1e420 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1e430 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1e440 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1e450 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1e460 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1e470 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1e480 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1e490 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1e4a0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1e4b0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1e4c0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1e4d0 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1e4e0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1e4f0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1e500 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1e510 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e520 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e530 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e540 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e550 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1e560 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1e570 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1e580 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1e590 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e5a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e5b0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e5c0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1e5d0 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  xt..**.** If the
1e5e0 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
1e5f0 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1e600 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
1e610 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
1e620 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1e630 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
1e640 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
1e650 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
1e660 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
1e670 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1e680 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
1e690 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
1e6a0 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
1e6b0 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
1e6c0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
1e6d0 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xGE opcode with 
1e6e0 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
1e6f0 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45  ts..** The IdxGE
1e700 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1e710 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
1e720 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
1e730 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47   but the.** IdxG
1e740 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1e750 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
1e760 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
1e770 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
1e780 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1e790 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1e7a0 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1e7b0 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20  case OP_SeekLT: 
1e7c0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1e7d0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1e7e0 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
1e7f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e800 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20  case OP_SeekGE: 
1e810 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1e820 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1e830 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
1e840 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e850 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1e860 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
1e870 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69  on result */.  i
1e880 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20  nt oc;          
1e890 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20    /* Opcode */. 
1e8a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e8b0 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f      /* The curso
1e8c0 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55  r to seek */.  U
1e8d0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1e8e0 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20    /* The key to 
1e8f0 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  seek for */.  in
1e900 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
1e910 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
1e920 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20  lumns or fields 
1e930 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  in the key */.  
1e940 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
1e950 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1e960 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1e970 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c  o */.  int eqOnl
1e980 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  y;        /* Onl
1e990 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  y interested in 
1e9a0 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20  == results */.. 
1e9b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e9c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1e9d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1e9e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1e9f0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1ea00 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ea10 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ea20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ea30 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1ea40 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
1ea50 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1ea60 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1ea70 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1ea80 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1ea90 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1eaa0 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1eab0 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1eac0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1ead0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1eae0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
1eaf0 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
1eb00 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f  p->opcode;.  eqO
1eb10 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e  nly = 0;.  pC->n
1eb20 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64  ullRow = 0;.#ifd
1eb30 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1eb40 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
1eb50 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
1eb60 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
1eb70 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1eb80 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  The BTREE_SEEK_E
1eb90 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73  Q flag is only s
1eba0 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73  et on index curs
1ebb0 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ors */.    asser
1ebc0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
1ebd0 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
1ebe0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
1ebf0 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 20 29  EE_SEEK_EQ)==0 )
1ec00 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e  ;..    /* The in
1ec10 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20  put value in P3 
1ec20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20  might be of any 
1ec30 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72  type: integer, r
1ec40 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20  eal, string,.   
1ec50 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
1ec60 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
1ec70 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
1ec80 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
1ec90 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65  do.    ** the se
1eca0 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69  ek, so convert i
1ecb0 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d  t. */.    pIn3 =
1ecc0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1ecd0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
1ece0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
1ecf0 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
1ed00 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
1ed10 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
1ed20 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
1ed30 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
1ed40 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1ed50 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
1ed60 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
1ed70 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1ed80 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1ed90 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1eda0 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c  without.    ** l
1edb0 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
1edc0 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
1edd0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
1ede0 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
1edf0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1ee00 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
1ee10 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
1ee20 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1ee30 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
1ee40 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1ee50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
1ee60 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1ee70 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
1ee80 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a  umber,.        *
1ee90 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
1eea0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
1eeb0 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
1eec0 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  /.        VdbeBr
1eed0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20  anchTaken(1,2); 
1eee0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
1eef0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1ef00 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1ef10 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1ef20 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
1ef30 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
1ef40 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1ef50 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1ef60 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
1ef70 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
1ef80 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
1ef90 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
1efa0 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
1efb0 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
1efc0 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
1efd0 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
1efe0 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
1eff0 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
1f000 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
1f010 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
1f020 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
1f030 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1f040 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64  if( pIn3->u.r<(d
1f050 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1f060 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1f070 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65  _SeekGE==(OP_See
1f080 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kGT-1) );.      
1f090 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1f0a0 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d  kLT==(OP_SeekLE-
1f0b0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1f0c0 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45  sert( (OP_SeekLE
1f0d0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1f0e0 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1f0f0 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1f100 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1f110 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
1f120 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20  01) ) oc--;.    
1f130 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1f140 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1f150 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c  on iKey is small
1f160 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
1f170 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
1f180 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
1f190 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20  bstitute <= for 
1f1a0 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20  < and > for >=. 
1f1b0 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69   */.      else i
1f1c0 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f  f( pIn3->u.r>(do
1f1d0 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
1f1e0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1f1f0 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLE==(OP_Seek
1f200 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LT+1) );.       
1f210 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1f220 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31  GT==(OP_SeekGE+1
1f230 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1f240 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20  ert( (OP_SeekLT 
1f250 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1f260 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20  eekGE & 0x0001) 
1f270 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
1f280 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
1f290 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
1f2a0 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20  1) ) oc++;.     
1f2b0 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63   }.    } .    rc
1f2c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1f2d0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1f2e0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
1f2f0 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
1f300 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  res);.    pC->mo
1f310 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
1f320 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
1f330 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20  P_Delete */.    
1f340 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1f350 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1f360 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1f370 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  or;.    }.  }els
1f380 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20  e{.    /* For a 
1f390 63 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20  cursor with the 
1f3a0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69  BTREE_SEEK_EQ hi
1f3b0 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f  nt, only the OP_
1f3c0 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a  SeekGE and.    *
1f3d0 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f  * OP_SeekLE opco
1f3e0 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c  des are allowed,
1f3f0 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20   and these must 
1f400 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  be immediately f
1f410 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62  ollowed.    ** b
1f420 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72  y an OP_IdxGT or
1f430 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65   OP_IdxLT opcode
1f440 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  , respectively, 
1f450 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
1f460 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  y..    */.    if
1f470 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1f480 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
1f490 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
1f4a0 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20  E_SEEK_EQ) ){.  
1f4b0 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a      eqOnly = 1;.
1f4c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1f4d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
1f4e0 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ekGE || pOp->opc
1f4f0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29  ode==OP_SeekLE )
1f500 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1f510 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
1f520 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31  P_IdxLT || pOp[1
1f530 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
1f540 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  GT );.      asse
1f550 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70  rt( pOp[1].p1==p
1f560 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20  Op[0].p1 );.    
1f570 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
1f580 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29  .p2==pOp[0].p2 )
1f590 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1f5a0 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30  pOp[1].p3==pOp[0
1f5b0 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p3 );.      as
1f5c0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e  sert( pOp[1].p4.
1f5d0 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29  i==pOp[0].p4.i )
1f5e0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69  ;.    }..    nFi
1f5f0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1f600 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1f610 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1f620 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
1f630 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1f640 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1f650 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1f660 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1f670 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
1f680 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1f690 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1f6a0 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1f6b0 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
1f6c0 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1f6d0 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
1f6e0 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
1f6f0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1f700 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
1f710 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
1f720 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1f730 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
1f740 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
1f750 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
1f760 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
1f770 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
1f780 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1f790 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
1f7a0 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1f7b0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1f7c0 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
1f7d0 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
1f7e0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1f7f0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
1f800 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1f810 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1f820 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
1f830 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
1f840 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
1f850 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1f860 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1f870 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
1f880 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1f890 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1f8a0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1f8b0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1f8c0 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42  ndif.    ExpandB
1f8d0 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1f8e0 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20   r.eqSeen = 0;. 
1f8f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f900 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1f910 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
1f920 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1f930 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
1f940 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1f950 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f960 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f970 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79  }.    if( eqOnly
1f980 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20   && r.eqSeen==0 
1f990 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1f9a0 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20   res!=0 );.     
1f9b0 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66   goto seek_not_f
1f9c0 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ound;.    }.  }.
1f9d0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1f9e0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
1f9f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1fa00 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1fa10 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1fa20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1fa30 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1fa40 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1fa50 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  GE ){  assert( o
1fa60 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c==OP_SeekGE || 
1fa70 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b  oc==OP_SeekGT );
1fa80 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
1fa90 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1faa0 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20  =OP_SeekGT) ){. 
1fab0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1fac0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1fad0 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63  BtreeNext(pC->uc
1fae0 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
1faf0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1fb00 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1fb10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1fb20 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
1fb30 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1fb40 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1fb50 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1fb60 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
1fb70 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
1fb80 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1fb90 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1fba0 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
1fbb0 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1fbc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1fbd0 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70  revious(pC->uc.p
1fbe0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1fbf0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1fc00 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1fc10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1fc20 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1fc30 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
1fc40 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
1fc50 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
1fc60 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
1fc70 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
1fc80 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
1fc90 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
1fca0 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
1fcb0 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e  BtreeEof(pC->uc.
1fcc0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
1fcd0 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75    }.seek_not_fou
1fce0 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nd:.  assert( pO
1fcf0 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
1fd00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
1fd10 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
1fd20 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  s ){.    goto ju
1fd30 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
1fd40 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a  e if( eqOnly ){.
1fd50 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1fd60 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
1fd70 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
1fd80 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
1fd90 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20  ;.    pOp++; /* 
1fda0 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c  Skip the OP_IdxL
1fdb0 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68  t or OP_IdxGT th
1fdc0 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20  at follows */.  
1fdd0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1fde0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1fdf0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1fe00 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
1fe10 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P2].**.** P1 
1fe20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1fe30 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1fe40 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1fe50 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1fe60 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1fe70 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1fe80 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1fe90 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1fea0 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1feb0 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1fec0 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1fed0 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1fee0 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1fef0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1ff00 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1ff10 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1ff20 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1ff30 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1ff40 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ppens..**.** P4 
1ff50 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  may contain an a
1ff60 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73  rray of integers
1ff70 20 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52   (type P4_INTARR
1ff80 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a  AY) containing.*
1ff90 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * one entry for 
1ffa0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
1ffb0 68 65 20 74 61 62 6c 65 20 50 31 20 69 73 20 6f  he table P1 is o
1ffc0 70 65 6e 20 6f 6e 2e 20 49 66 20 73 6f 2c 20 74  pen on. If so, t
1ffd0 68 65 6e 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  hen.** parameter
1ffe0 20 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20   P3 is a cursor 
1fff0 6f 70 65 6e 20 6f 6e 20 61 20 64 61 74 61 62 61  open on a databa
20000 73 65 20 69 6e 64 65 78 2e 20 49 66 20 61 72 72  se index. If arr
20010 61 79 20 65 6e 74 72 79 0a 2a 2a 20 61 5b 69 5d  ay entry.** a[i]
20020 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
20030 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
20040 6e 20 28 61 5b 69 5d 2d 31 29 20 66 72 6f 6d 20  n (a[i]-1) from 
20050 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a  cursor P3 is .**
20060 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70   equivalent to p
20070 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65  erforming the de
20080 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20  ferred seek and 
20090 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c  then reading col
200a0 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50  umn i .** from P
200b0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  1..*/.case OP_Se
200c0 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20  ek: {    /* in2 
200d0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
200e0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
200f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20100 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20110 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20120 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20130 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20140 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
20150 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
20160 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
20170 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
20180 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
20190 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
201a0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
201b0 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  = 0;.  pIn2 = &a
201c0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
201d0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
201e0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
201f0 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
20200 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
20210 74 6f 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74  to = 1;.  assert
20220 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
20230 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f  4_INTARRAY || pO
20240 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20  p->p4.ai==0 );. 
20250 20 70 43 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70   pC->aAltMap = p
20260 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 70 43 2d  Op->p4.ai;.  pC-
20270 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 2d  >pAltCursor = p-
20280 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b  >apCsr[pOp->p3];
20290 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a  .  break;.}.  ..
202a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64  /* Opcode: Found
202b0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
202c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
202d0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
202e0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
202f0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
20300 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
20310 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
20320 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
20330 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
20340 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
20350 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
20360 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
20370 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a  .** record..**.*
20380 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
20390 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
203a0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
203b0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
203c0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61  3 and P4.** is a
203d0 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
203e0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
203f0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
20400 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69  o P2 and.** P1 i
20410 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
20420 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
20430 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
20440 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
20450 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
20460 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
20470 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61  t can be.** adva
20480 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77  nced in the forw
20490 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  ard direction.  
204a0 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63  The Next instruc
204b0 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a  tion will work,.
204c0 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50  ** but not the P
204d0 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  rev instruction.
204e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
204f0 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
20500 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73  flict, NotExists
20510 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f  . SeekGe.*/./* O
20520 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
20530 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20540 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20550 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20560 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
20570 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
20580 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
20590 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
205a0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
205b0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
205c0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
205d0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
205e0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
205f0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
20600 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
20610 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
20620 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
20630 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
20640 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e  3 and P4.** is n
20650 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  ot the prefix of
20660 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
20670 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
20680 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20  made to P2.  If 
20690 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74  P1 .** does cont
206a0 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f  ain an entry who
206b0 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65  se prefix matche
206c0 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f  s the P3/P4 reco
206d0 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a  rd then control.
206e0 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ** falls through
206f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
20700 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20  truction and P1 
20710 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
20720 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68   at the.** match
20730 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
20740 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
20750 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20760 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
20770 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
20780 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
20790 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
207a0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
207b0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
207c0 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
207d0 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
207e0 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
207f0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20800 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
20810 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f  s, NoConflict.*/
20820 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f  ./* Opcode: NoCo
20830 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20  nflict P1 P2 P3 
20840 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
20850 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
20860 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
20870 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
20880 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
20890 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
208a0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
208b0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
208c0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
208d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
208e0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
208f0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
20900 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
20910 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
20920 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
20930 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
20940 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
20950 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20  ** contains any 
20960 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70  NULL value, jump
20970 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
20980 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d  P2.  If all term
20990 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  s of the.** reco
209a0 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20  rd are not-NULL 
209b0 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20  then a check is 
209c0 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  done to determin
209d0 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20  e if any row in 
209e0 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20  the.** P1 index 
209f0 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63  btree has a matc
20a00 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e  hing key prefix.
20a10 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
20a20 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a  o matches, jump.
20a30 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  ** immediately t
20a40 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20  o P2.  If there 
20a50 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c  is a match, fall
20a60 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61   through and lea
20a70 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72  ve the P1.** cur
20a80 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
20a90 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77  the matching row
20aa0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
20ab0 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ode is similar t
20ac0 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69  o OP_NotFound wi
20ad0 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  th the exception
20ae0 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72  s that the.** br
20af0 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  anch is always t
20b00 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74  aken if any part
20b10 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b   of the search k
20b20 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  ey input is NULL
20b30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
20b40 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
20b50 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
20b60 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
20b70 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
20b80 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
20b90 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
20ba0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
20bb0 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
20bc0 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
20bd0 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
20be0 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
20bf0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
20c00 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
20c10 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ts.*/.case OP_No
20c20 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a  Conflict:     /*
20c30 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
20c40 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
20c50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
20c60 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
20c70 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
20c80 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
20c90 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
20ca0 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d  s;.  int takeJum
20cb0 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56  p;.  int ii;.  V
20cc0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
20cd0 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72   int res;.  char
20ce0 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63   *pFree;.  Unpac
20cf0 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b  kedRecord *pIdxK
20d00 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ey;.  UnpackedRe
20d10 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61  cord r;.  char a
20d20 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73  TempRec[ROUND8(s
20d30 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65  izeof(UnpackedRe
20d40 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28  cord)) + sizeof(
20d50 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69  Mem)*4 + 7];..#i
20d60 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
20d70 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
20d80 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de!=OP_NoConflic
20d90 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  t ) sqlite3_foun
20da0 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
20db0 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  f..  assert( pOp
20dc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20dd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
20de0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20df0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
20e00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20e10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20e20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20e30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
20e40 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
20e50 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
20e60 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d  .#endif.  pIn3 =
20e70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
20e80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
20e90 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
20ea0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
20eb0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
20ec0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
20ed0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
20ee0 30 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30  0 );.  pFree = 0
20ef0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
20f00 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
20f10 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
20f20 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
20f30 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
20f40 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
20f50 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28  = pIn3;.    for(
20f60 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c  ii=0; ii<r.nFiel
20f70 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
20f80 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
20f90 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20  id(&r.aMem[ii]) 
20fa0 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  );.      ExpandB
20fb0 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lob(&r.aMem[ii])
20fc0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
20fd0 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28 20  DEBUG.      if( 
20fe0 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52  ii ) REGISTER_TR
20ff0 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20  ACE(pOp->p3+ii, 
21000 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65  &r.aMem[ii]);.#e
21010 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70  ndif.    }.    p
21020 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d  IdxKey = &r;.  }
21030 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65  else{.    pIdxKe
21040 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
21050 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
21060 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  rd(.        pC->
21070 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52  pKeyInfo, aTempR
21080 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
21090 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20  Rec), &pFree.   
210a0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78   );.    if( pIdx
210b0 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
210c0 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
210d0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
210e0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
210f0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
21100 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
21110 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
21120 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
21130 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49  ->n, pIn3->z, pI
21140 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49  dxKey);.  }.  pI
21150 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72  dxKey->default_r
21160 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d  c = 0;.  takeJum
21170 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  p = 0;.  if( pOp
21180 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43  ->opcode==OP_NoC
21190 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f  onflict ){.    /
211a0 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43  * For the OP_NoC
211b0 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20  onflict opcode, 
211c0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
211d0 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20   any of the.    
211e0 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20  ** input fields 
211f0 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20  are NULL, since 
21200 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e  any key with a N
21210 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20  ULL will not.   
21220 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a   ** conflict */.
21230 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
21240 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64  <pIdxKey->nField
21250 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ; ii++){.      i
21260 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d  f( pIdxKey->aMem
21270 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
21280 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20  _Null ){.       
21290 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20   takeJump = 1;. 
212a0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
212b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
212c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
212d0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
212e0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
212f0 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
21300 20 26 72 65 73 29 3b 0a 20 20 73 71 6c 69 74 65   &res);.  sqlite
21310 33 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65  3DbFree(db, pFre
21320 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  e);.  if( rc!=SQ
21330 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62  LITE_OK ){.    b
21340 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  reak;.  }.  pC->
21350 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
21360 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74  ;.  alreadyExist
21370 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
21380 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d  pC->nullRow = 1-
21390 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
213a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
213b0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
213c0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
213d0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
213e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
213f0 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62  Found ){.    Vdb
21400 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72  eBranchTaken(alr
21410 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29  eadyExists!=0,2)
21420 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64  ;.    if( alread
21430 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a  yExists ) goto j
21440 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
21450 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
21460 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70  chTaken(takeJump
21470 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d  ||alreadyExists=
21480 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74  =0,2);.    if( t
21490 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65  akeJump || !alre
214a0 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f  adyExists ) goto
214b0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
214c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
214d0 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
214e0 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
214f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
21500 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
21510 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
21520 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
21530 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
21540 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
21550 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50  ger.** keys).  P
21560 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 is an integer 
21570 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f  rowid.  If P1 do
21580 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
21590 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20   record with.** 
215a0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
215b0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
215c0 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32  o P2.  Or, if P2
215d0 20 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a   is 0, raise an.
215e0 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ** SQLITE_CORRUP
215f0 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64  T error. If P1 d
21600 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  oes contain a re
21610 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20  cord with rowid 
21620 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76  P3 then .** leav
21630 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
21640 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
21650 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  cord and fall th
21660 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
21670 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
21680 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
21690 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
216a0 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
216b0 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
216c0 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
216d0 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
216e0 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
216f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
21700 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
21710 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
21720 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
21730 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
21740 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
21750 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
21760 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
21770 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
21780 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
21790 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
217a0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
217b0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
217c0 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
217d0 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ct.*/.case OP_No
217e0 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20  tExists: {      
217f0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
21800 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
21810 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
21820 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
21830 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
21840 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
21850 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
21860 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
21870 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
21880 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21890 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
218a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
218b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
218c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
218d0 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
218e0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
218f0 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64  seekOp = 0;.#end
21900 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  if.  assert( pC-
21910 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
21920 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
21930 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
21940 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
21950 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
21960 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
21970 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  0 );.  res = 0;.
21980 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
21990 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  .i;.  rc = sqlit
219a0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
219b0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
219c0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
219d0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
219e0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
219f0 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74  0 );.  pC->movet
21a00 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20  oTarget = iKey; 
21a10 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44   /* Used by OP_D
21a20 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e  elete */.  pC->n
21a30 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43  ullRow = 0;.  pC
21a40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
21a50 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
21a60 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21a70 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61  o = 0;.  VdbeBra
21a80 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
21a90 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65  2);.  pC->seekRe
21aa0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66  sult = res;.  if
21ab0 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
21ac0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
21ad0 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28  TE_OK );.    if(
21ae0 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
21af0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
21b00 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
21b10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
21b20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
21b30 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
21b40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21b50 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
21b60 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
21b70 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72  is: r[P2]=cursor
21b80 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a  [P1].ctr++.**.**
21b90 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
21ba0 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
21bb0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
21bc0 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
21bd0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
21be0 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
21bf0 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
21c00 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
21c10 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
21c20 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
21c30 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
21c40 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
21c50 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
21c60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
21c70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
21c80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21c90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21ca0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
21cb0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
21cc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
21cd0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
21ce0 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
21cf0 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75  PE_VTAB );.  pOu
21d00 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
21d10 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
21d20 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43  ut->u.i = p->apC
21d30 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71  sr[pOp->p1]->seq
21d40 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b  Count++;.  break
21d50 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
21d60 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20   NewRowid P1 P2 
21d70 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
21d80 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
21d90 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20  **.** Get a new 
21da0 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
21db0 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f  umber (a.k.a "ro
21dc0 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68  wid") used as th
21dd0 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65  e key to a table
21de0 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20  ..** The record 
21df0 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72  number is not pr
21e00 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73  eviously used as
21e10 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61   a key in the da
21e20 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20  tabase.** table 
21e30 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
21e40 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e  oints to.  The n
21e50 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
21e60 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77   is written.** w
21e70 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74  ritten to regist
21e80 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
21e90 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20  P3>0 then P3 is 
21ea0 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
21eb0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
21ec0 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68  this VDBE that h
21ed0 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72  olds .** the lar
21ee0 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20  gest previously 
21ef0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
21f00 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20   number. No new 
21f10 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61  record numbers a
21f20 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f  re.** allowed to
21f30 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68   be less than th
21f40 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74  is value. When t
21f50 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65  his value reache
21f60 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a  s its maximum, .
21f70 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c  ** an SQLITE_FUL
21f80 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  L error is gener
21f90 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67  ated. The P3 reg
21fa0 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64  ister is updated
21fb0 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67   with the '.** g
21fc0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
21fd0 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20  number. This P3 
21fe0 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65  mechanism is use
21ff0 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
22000 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49  ent the.** AUTOI
22010 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65  NCREMENT feature
22020 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77  ..*/.case OP_New
22030 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
22040 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
22050 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
22060 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
22070 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
22080 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
22090 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
220a0 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
220b0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
220c0 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
220d0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
220e0 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
220f0 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
22100 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
22110 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
22120 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
22130 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
22140 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
22150 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
22160 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
22170 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
22180 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
22190 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
221a0 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
221b0 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
221c0 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
221d0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f  .  res = 0;.  pO
221e0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
221f0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
22200 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22210 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22220 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22230 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22240 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22250 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
22260 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
22270 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
22280 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
22290 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
222a0 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e    {.    /* The n
222b0 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
222c0 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
222d0 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
222e0 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
222f0 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
22300 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
22310 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
22320 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
22330 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
22340 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
22350 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
22360 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
22370 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
22380 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
22390 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
223a0 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
223b0 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
223c0 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
223d0 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
223e0 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
223f0 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
22400 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
22410 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
22420 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
22430 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
22440 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
22450 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
22460 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
22470 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
22480 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
22490 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
224a0 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
224b0 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
224c0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
224d0 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
224e0 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
224f0 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
22500 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
22510 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
22520 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22530 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
22540 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
22550 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
22560 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
22570 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
22580 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
22590 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
225a0 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
225b0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
225c0 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
225d0 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
225e0 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
225f0 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
22600 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
22610 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
22620 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
22630 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
22640 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
22650 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
22660 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
22670 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
22680 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
22690 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
226a0 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
226b0 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
226c0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
226d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
226e0 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70  reeLast(pC->uc.p
226f0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
22700 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
22710 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22720 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
22730 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
22740 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
22750 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
22760 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
22770 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
22780 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
22790 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
227a0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
227b0 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  alid(pC->uc.pCur
227c0 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
227d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
227e0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e  eKeySize(pC->uc.
227f0 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
22800 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
22810 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
22820 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
22830 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
22840 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
22850 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
22860 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
22870 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
22880 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
22890 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
228a0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
228b0 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
228c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
228d0 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
228e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
228f0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
22900 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
22910 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
22920 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
22930 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
22940 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
22950 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
22960 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
22970 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
22980 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
22990 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
229a0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
229b0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
229c0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
229d0 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
229e0 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
229f0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
22a00 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
22a10 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
22a20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
22a30 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
22a40 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
22a50 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
22a60 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
22a70 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
22a80 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
22a90 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
22aa0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
22ab0 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
22ac0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
22ad0 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
22ae0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
22af0 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  em);.      }.   
22b00 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
22b10 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a  Valid(pMem) );..
22b20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
22b30 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d  RACE(pOp->p3, pM
22b40 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  em);.      sqlit
22b50 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
22b60 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
22b70 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
22b80 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
22b90 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
22ba0 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
22bb0 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ger */.      if(
22bc0 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
22bd0 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
22be0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
22bf0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
22c00 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
22c10 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38  P: R-12275-61338
22c20 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
22c30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22c40 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
22c50 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75     if( v<pMem->u
22c60 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20  .i+1 ){.        
22c70 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20  v = pMem->u.i + 
22c80 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
22c90 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pMem->u.i = v;.
22ca0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
22cb0 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64   if( pC->useRand
22cc0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
22cd0 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   /* IMPLEMENTATI
22ce0 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34  ON-OF: R-07677-4
22cf0 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67  1881 If the larg
22d00 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75  est ROWID is equ
22d10 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20  al to the.      
22d20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  ** largest possi
22d30 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32  ble integer (922
22d40 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
22d50 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  ) then the datab
22d60 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67  ase.      ** eng
22d70 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69  ine starts picki
22d80 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64  ng positive cand
22d90 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20  idate ROWIDs at 
22da0 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20  random until.   
22db0 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f     ** it finds o
22dc0 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70  ne that is not p
22dd0 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20  reviously used. 
22de0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
22df0 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
22e00 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20  /* We cannot be 
22e10 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  in random rowid 
22e20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a  mode if this is.
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
22e50 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
22e60 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20   table. */.     
22e70 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
22e80 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  do{.        sqli
22e90 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
22ea0 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
22eb0 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
22ec0 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b  _ROWID>>1); v++;
22ed0 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74    /* Ensure that
22ee0 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74 68   v is greater th
22ef0 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  an zero */.     
22f00 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d   }while(  ((rc =
22f10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
22f20 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
22f30 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  uc.pCursor, 0, (
22f40 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20  u64)v,.         
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29          0, &res)
22f80 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20  )==SQLITE_OK).  
22f90 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65            && (re
22fa0 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20  s==0).          
22fb0 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29    && (++cnt<100)
22fc0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
22fd0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
22fe0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
22ff0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
23000 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38  ;   /* IMP: R-38
23010 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20  219-53002 */.   
23020 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23030 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23040 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
23050 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45  rt( v>0 );  /* E
23060 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30  V: R-40812-03570
23070 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   */.    }.    pC
23080 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23090 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
230a0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
230b0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
230c0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
230d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
230e0 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
230f0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
23100 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
23110 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a  [P3] data=r[P2].
23120 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
23130 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
23140 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
23150 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
23160 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
23170 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
23180 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
23190 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
231a0 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
231b0 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
231c0 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
231d0 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74  alue MEM_Blob st
231e0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
231f0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
23200 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
23210 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
23220 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
23230 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a   be a MEM_Int..*
23240 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
23250 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
23260 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
23270 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
23280 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
23290 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
232a0 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
232b0 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
232c0 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
232d0 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
232e0 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
232f0 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
23300 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
23310 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
23320 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
23330 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
23340 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
23350 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
23360 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
23370 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
23380 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65  s set and if the
23390 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
233a0 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72  e last seek oper
233b0 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69  ation (OP_NotExi
233c0 73 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65  sts) was a succe
233d0 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ss, then this.**
233e0 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20   operation will 
233f0 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66  not attempt to f
23400 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69  ind the appropri
23410 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64  ate row before d
23420 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65  oing.** the inse
23430 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74  rt but will inst
23440 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68  ead overwrite th
23450 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63  e row that the c
23460 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72  ursor is.** curr
23470 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
23480 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20  o.  Presumably, 
23490 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74  the prior OP_Not
234a0 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a  Exists opcode.**
234b0 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73   has already pos
234c0 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
234d0 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54  or correctly.  T
234e0 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
234f0 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62  zation.** that b
23500 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63  oosts performanc
23510 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65  e by avoiding re
23520 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a  dundant seeks..*
23530 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
23540 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
23550 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
23560 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
23570 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
23580 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
23590 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
235a0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
235b0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
235c0 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
235d0 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
235e0 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
235f0 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
23600 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
23610 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
23620 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
23630 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74  ay point to a st
23640 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
23650 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20  the table-name, 
23660 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c  or.** may be NUL
23670 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20  L. If it is not 
23680 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
23690 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28  pdate-hook .** (
236a0 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
236b0 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
236c0 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  ked following a 
236d0 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
236e0 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
236f0 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
23700 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
23710 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
23720 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
23730 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
23740 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
23750 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
23760 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
23770 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
23780 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
23790 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
237a0 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
237b0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
237c0 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
237d0 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
237e0 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
237f0 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
23800 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
23810 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
23820 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
23830 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
23840 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
23850 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
23860 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
23870 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
23880 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50  ode: InsertInt P
23890 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
238a0 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b   Synopsis:  intk
238b0 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d  ey=P3 data=r[P2]
238c0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
238d0 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
238e0 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
238f0 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
23900 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
23910 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
23920 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
23930 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
23940 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
23950 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
23960 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
23970 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
23980 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
23990 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
239a0 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
239b0 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
239c0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
239d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
239e0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
239f0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
23a00 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
23a10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
23a20 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b  teger ROWID or k
23a30 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ey for the recor
23a40 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
23a50 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23a60 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
23a70 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
23a80 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
23a90 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
23aa0 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f   nZero;        /
23ab0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
23ac0 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64  -bytes to append
23ad0 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
23ae0 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
23af0 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
23b00 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
23b10 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
23b20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
23b30 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
23b40 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
23b50 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
23b60 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
23b70 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20  *zTbl; /* Table 
23b80 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
23b90 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he opdate hook *
23ba0 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
23bb0 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
23bc0 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
23bd0 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
23be0 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
23bf0 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61  */..  pData = &a
23c00 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
23c10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23c20 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23c30 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
23c40 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
23c50 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
23c60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23c70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23c80 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
23c90 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
23ca0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
23cb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
23cc0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
23cd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
23ce0 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
23cf0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
23d00 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
23d10 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23d20 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
23d30 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
23d40 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
23d50 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
23d60 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
23d70 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
23d80 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
23d90 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
23da0 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
23db0 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e     iKey = pKey->
23dc0 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
23dd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
23de0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
23df0 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  Int );.    iKey 
23e00 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
23e10 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
23e20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
23e30 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
23e40 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
23e50 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
23e60 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
23e70 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  = lastRowid = iK
23e80 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
23e90 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
23ea0 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
23eb0 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
23ec0 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
23ed0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
23ee0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
23ef0 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
23f00 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73  );.  }.  seekRes
23f10 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
23f20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
23f30 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
23f40 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
23f50 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
23f60 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
23f70 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
23f80 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
23f90 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  lse{.    nZero =
23fa0 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73   0;.  }.  rc = s
23fb0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
23fc0 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
23fd0 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  , 0, iKey,.     
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70       pData->z, p
24000 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a  Data->n, nZero,.
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
24030 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
24040 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75  ND)!=0, seekResu
24050 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65  lt.  );.  pC->de
24060 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
24070 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
24080 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24090 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
240a0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
240b0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
240c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
240d0 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
240e0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
240f0 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
24100 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
24110 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
24120 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
24130 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
24140 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
24150 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
24160 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
24170 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
24180 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
24190 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
241a0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
241b0 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
241c0 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
241d0 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
241e0 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
241f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
24200 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
24210 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
24220 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
24230 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
24240 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
24250 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
24260 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
24270 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
24280 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
24290 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
242a0 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
242b0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
242c0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
242d0 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
242e0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
242f0 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
24300 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
24310 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
24320 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
24330 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
24340 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
24350 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
24360 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
24370 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
24380 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
24390 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
243a0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
243b0 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
243c0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
243d0 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
243e0 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
243f0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
24400 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
24410 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
24420 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
24430 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
24440 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
24450 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
24460 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
24470 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
24480 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
24490 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
244a0 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
244b0 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
244c0 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
244d0 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
244e0 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
244f0 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
24500 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
24510 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
24520 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
24530 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
24540 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
24550 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
24560 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
24570 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
24580 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
24590 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
245a0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
245b0 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
245c0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
245d0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
245e0 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
245f0 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
24600 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
24610 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
24620 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
24630 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
24640 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
24650 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  L, then it is th
24660 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
24670 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a  ble that P1 is.*
24680 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  * pointing to.  
24690 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  The update hook 
246a0 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
246b0 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
246c0 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
246d0 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20  ULL then the P1 
246e0 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
246f0 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
24700 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  .** using OP_Not
24710 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
24720 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
24730 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
24740 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
24750 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 75 38  Cursor *pC;.  u8
24760 20 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61   hasUpdateCallba
24770 63 6b 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ck;..  assert( p
24780 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24790 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
247a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
247b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
247c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
247d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
247e0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
247f0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
24800 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
24810 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
24820 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
24830 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 68 61  veto==0 );..  ha
24840 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  sUpdateCallback 
24850 3d 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  = db->xUpdateCal
24860 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
24870 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  .z && pC->isTabl
24880 65 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  e;.  if( pOp->p5
24890 20 26 26 20 68 61 73 55 70 64 61 74 65 43 61 6c   && hasUpdateCal
248a0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 73 71 6c  lback ){.    sql
248b0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
248c0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
248d0 20 26 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67   &pC->movetoTarg
248e0 65 74 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  et);.  }..#ifdef
248f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
24900 2f 2a 20 54 68 65 20 73 65 65 6b 20 6f 70 65 72  /* The seek oper
24910 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74  ation that posit
24920 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
24930 20 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44 65 6c   prior to OP_Del
24940 65 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20 68 61  ete will.  ** ha
24950 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  ve also set the 
24960 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
24970 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f   field to the ro
24980 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 74  wid of the row t
24990 68 61 74 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e  hat.  ** is bein
249a0 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 69  g deleted */.  i
249b0 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20  f( pOp->p4.z && 
249c0 70 43 2d 3e 69 73 54 61 62 6c 65 20 26 26 20 70  pC->isTable && p
249d0 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20  Op->p5==0 ){.   
249e0 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20   i64 iKey = 0;. 
249f0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
24a00 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43  eySize(pC->uc.pC
24a10 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20  ursor, &iKey);. 
24a20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
24a30 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
24a40 79 20 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69 66  y ); .  }.#endif
24a50 0a 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67  ..  /* Only flag
24a60 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
24a70 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
24a80 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
24a90 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
24aa0 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
24ab0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
24ac0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
24ad0 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
24ae0 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
24af0 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
24b00 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
24b10 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
24b20 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
24b30 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
24b40 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
24b50 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
24b60 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
24b70 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
24b80 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
24b90 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24ba0 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
24bb0 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
24bc0 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
24bd0 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
24be0 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
24bf0 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
24c00 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
24c10 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
24c20 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
24c30 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
24c40 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
24c50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24c60 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
24c70 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
24c80 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
24c90 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24ca0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
24cb0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
24cc0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
24cd0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
24ce0 4f 4b 20 26 26 20 68 61 73 55 70 64 61 74 65 43  OK && hasUpdateC
24cf0 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 64  allback ){.    d
24d00 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
24d10 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
24d20 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
24d30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24d40 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44            db->aD
24d50 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
24d60 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d  , pOp->p4.z, pC-
24d70 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
24d80 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24d90 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
24da0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
24db0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
24dc0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
24dd0 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
24de0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
24df0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
24e00 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
24e10 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
24e20 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
24e30 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
24e40 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
24e50 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
24e60 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
24e70 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
24e80 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
24e90 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
24ea0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
24eb0 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
24ec0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
24ed0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
24ee0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
24ef0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
24f00 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
24f10 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
24f20 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
24f30 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
24f40 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
24f50 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
24f60 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
24f70 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74  :  if key(P1)!=t
24f80 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
24f90 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
24fa0 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
24fb0 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
24fc0 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
24fd0 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
24fe0 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72  record blob in r
24ff0 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e  egister P3 again
25000 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
25010 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  he entry that .*
25020 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  * the sorter cur
25030 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
25040 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74  ints to.  Only t
25050 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c  he first P4 fiel
25060 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61  ds.** of r[P3] a
25070 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65  nd the sorter re
25080 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65  cord are compare
25090 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
250a0 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
250b0 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
250c0 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
250d0 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
250e0 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
250f0 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
25100 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
25110 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
25120 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
25130 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
25140 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
25150 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
25160 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
25170 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
25180 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
25190 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
251a0 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
251b0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
251c0 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
251d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
251e0 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
251f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25200 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
25210 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20  KeyCol;..  pC = 
25220 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25230 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
25240 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
25250 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
25260 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
25270 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
25280 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43  Op->p3];.  nKeyC
25290 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ol = pOp->p4.i;.
252a0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
252b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
252c0 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
252d0 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72  In3, nKeyCol, &r
252e0 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  es);.  VdbeBranc
252f0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
25300 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
25310 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
25320 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
25330 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
25340 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  a P1 P2 P3 * *.*
25350 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
25360 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
25370 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
25380 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20   P2 the current 
25390 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20  sorter data for 
253a0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31  sorter cursor P1
253b0 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20  ..** Then clear 
253c0 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65  the column heade
253d0 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f  r cache on curso
253e0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P3..**.** This
253f0 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61   opcode is norma
25400 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20  lly use to move 
25410 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20  a record out of 
25420 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69  the sorter and i
25430 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65  nto.** a registe
25440 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  r that is the so
25450 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75 64  urce for a pseud
25460 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63  o-table cursor c
25470 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
25480 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61  OpenPseudo.  Tha
25490 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  t pseudo-table c
254a0 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65  ursor is the one
254b0 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 66   that is identif
254c0 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65  ied by.** parame
254d0 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e  ter P3.  Clearin
254e0 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20  g the P3 column 
254f0 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f 66  cache as part of
25500 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76   this opcode sav
25510 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61  es.** us from ha
25520 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20  ving to issue a 
25530 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77  separate NullRow
25540 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
25550 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68 65  clear that cache
25560 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
25570 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  terData: {.  Vdb
25580 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
25590 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
255a0 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d  ->p2];.  pC = p-
255b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
255c0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
255d0 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20  ter(pC) );.  rc 
255e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
255f0 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f  terRowkey(pC, pO
25600 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  ut);.  assert( r
25610 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
25620 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d  (pOut->flags & M
25630 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73  EM_Blob) );.  as
25640 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25650 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25660 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 2d 3e 61  Cursor );.  p->a
25670 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
25680 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25690 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
256a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
256b0 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a   RowData P1 P2 *
256c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
256d0 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
256e0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
256f0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
25700 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20  mplete row data 
25710 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
25720 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
25730 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
25740 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
25750 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
25760 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
25770 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
25780 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
25790 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
257a0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
257b0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
257c0 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
257d0 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
257e0 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
257f0 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
25800 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
25810 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  table..*/./* Opc
25820 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50  ode: RowKey P1 P
25830 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
25840 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a  sis: r[P2]=key.*
25850 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
25860 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
25870 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79  complete row key
25880 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
25890 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
258a0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
258b0 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
258c0 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65  The key is copie
258d0 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
258e0 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
258f0 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
25900 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
25910 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
25920 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
25930 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
25940 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
25950 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
25960 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
25970 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
25980 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
25990 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
259a0 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
259b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
259c0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
259d0 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36  r;.  u32 n;.  i6
259e0 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d  4 n64;..  pOut =
259f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
25a00 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
25a10 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
25a20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
25a30 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
25a40 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
25a50 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
25a60 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
25a70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25a80 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25a90 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
25aa0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25ab0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25ac0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25ad0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
25ae0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
25af0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
25b00 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
25b10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
25b20 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  le || pOp->opcod
25b30 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e!=OP_RowData );
25b40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
25b50 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70  sTable==0 || pOp
25b60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
25b70 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
25b80 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
25b90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25ba0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
25bb0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
25bc0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  >uc.pCursor;..  
25bd0 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79  /* The OP_RowKey
25be0 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20   and OP_RowData 
25bf0 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66  opcodes always f
25c00 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73  ollow OP_NotExis
25c10 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65  ts or.  ** OP_Re
25c20 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74  wind/Op_Next wit
25c30 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67  h no intervening
25c40 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68   instructions th
25c50 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
25c60 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72  ate.  ** the cur
25c70 73 6f 72 2e 20 20 49 66 20 74 68 69 73 20 77 68  sor.  If this wh
25c80 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65  ere not the case
25c90 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c  , on of the foll
25ca0 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a  owing assert()s.
25cb0 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e    ** would fail.
25cc0 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76    Should this ev
25cd0 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75  er change (becau
25ce0 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e  se of changes in
25cf0 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67   the code.  ** g
25d00 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74  enerator) then t
25d10 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20  he fix would be 
25d20 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c  to insert a call
25d30 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
25d40 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
25d50 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ()..  */.  asser
25d60 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25d70 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
25d80 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
25d90 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
25da0 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20  pCrsr) );.#if 0 
25db0 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64   /* Not required
25dc0 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76   due to the prev
25dd0 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29  ious to assert()
25de0 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20   statements */. 
25df0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25e00 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
25e10 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
25e20 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
25e30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25e40 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  ;.#endif..  if( 
25e50 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
25e60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
25e70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
25e80 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
25e90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
25ea0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
25eb0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
25ec0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
25ed0 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
25ee0 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
25ef0 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
25f00 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
25f10 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
25f20 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
25f30 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
25f40 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
25f50 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
25f60 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f  }else{.    VVA_O
25f70 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
25f80 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
25f90 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61  Crsr, &n);.    a
25fa0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
25fb0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61  E_OK );    /* Da
25fc0 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
25fd0 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20  fail */.    if( 
25fe0 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
25ff0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
26000 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
26010 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
26020 20 20 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63 61    }.  }.  testca
26030 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66  se( n==0 );.  if
26040 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
26050 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
26060 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20  Out, MAX(n,32)) 
26070 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
26080 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  em;.  }.  pOut->
26090 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54  n = n;.  MemSetT
260a0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
260b0 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70  M_Blob);.  if( p
260c0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
260d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
260e0 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
260f0 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
26100 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
26110 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
26120 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
26130 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
26140 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
26150 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
26160 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
26170 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
26180 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
26190 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
261a0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
261b0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
261c0 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
261d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
261e0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
261f0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
26200 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f  =rowid.**.** Sto
26210 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
26220 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
26230 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
26240 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
26250 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
26260 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
26270 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
26280 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
26290 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
262a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
262b0 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
262c0 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
262d0 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
262e0 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
262f0 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
26300 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
26310 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
26320 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
26330 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
26340 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
26350 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
26360 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
26370 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
26380 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
26390 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
263a0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
263b0 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d  odule;..  pOut =
263c0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
263d0 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
263e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
263f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26400 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26410 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26420 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26430 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26440 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
26450 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
26460 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
26470 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
26480 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
26490 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
264a0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
264b0 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
264c0 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
264d0 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
264e0 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
264f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
26500 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
26510 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
26520 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a  CURTYPE_VTAB ){.
26530 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
26540 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20  uc.pVCur!=0 );. 
26550 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75     pVtab = pC->u
26560 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
26570 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
26580 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
26590 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
265a0 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
265b0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
265c0 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43  Rowid(pC->uc.pVC
265d0 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  ur, &v);.    sql
265e0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
265f0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
26600 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
26610 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
26620 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
26630 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
26640 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
26650 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
26660 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
26670 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
26680 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
26690 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
266a0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
266b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
266c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
266d0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
266e0 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
266f0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
26700 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
26710 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
26720 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
26730 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 76 29  >uc.pCursor, &v)
26740 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
26750 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
26760 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
26770 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65  ause of CursorRe
26780 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f  store() above */
26790 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
267a0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
267b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
267c0 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
267d0 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
267e0 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
267f0 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
26800 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
26810 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
26820 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
26830 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
26840 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
26850 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
26860 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
26870 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
26880 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
26890 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
268a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
268b0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
268c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
268d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
268e0 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
268f0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61  ow = 1;.  pC->ca
26900 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26910 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
26920 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
26930 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20  TYPE_BTREE ){.  
26940 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
26950 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
26960 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
26970 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75  learCursor(pC->u
26980 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  c.pCursor);.  }.
26990 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
269a0 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
269b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
269c0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
269d0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
269e0 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
269f0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
26a00 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
26a10 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
26a20 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
26a30 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
26a40 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
26a50 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
26a60 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
26a70 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
26a80 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
26a90 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
26aa0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
26ab0 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
26ac0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
26ad0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
26ae0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
26af0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
26b00 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
26b10 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
26b20 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
26b30 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
26b40 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
26b50 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
26b60 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
26b70 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
26b80 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
26b90 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
26ba0 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b  .case OP_Last: {
26bb0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
26bc0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26bd0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
26be0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
26bf0 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
26c00 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26c10 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26c20 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26c30 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26c40 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26c50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26c60 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26c70 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
26c80 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
26c90 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
26ca0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
26cb0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
26cc0 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
26cd0 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e  , &res);.  pC->n
26ce0 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
26cf0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
26d00 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
26d10 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
26d20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
26d30 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
26d40 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20  pOp->p3;.#ifdef 
26d50 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
26d60 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
26d70 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
26d80 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
26d90 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
26da0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
26db0 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
26dc0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
26dd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
26de0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
26df0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26e00 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
26e10 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
26e20 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
26e30 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
26e40 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
26e50 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
26e60 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
26e70 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
26e80 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
26e90 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
26ea0 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
26eb0 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
26ec0 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
26ed0 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
26ee0 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
26ef0 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
26f00 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
26f10 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
26f20 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
26f30 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
26f40 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
26f50 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
26f60 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
26f70 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
26f80 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
26f90 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
26fa0 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
26fb0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
26fc0 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
26fd0 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
26fe0 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
26ff0 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
27000 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
27010 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
27020 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
27030 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
27040 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
27050 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
27060 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
27070 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
27080 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
27090 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
270a0 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
270b0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
270c0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
270d0 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
270e0 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
270f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
27100 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
27110 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
27120 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
27130 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
27140 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
27150 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
27160 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
27170 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
27180 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
27190 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20  index is empty, 
271a0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
271b0 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68   to P2..** If th
271c0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
271d0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
271e0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
271f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a  he following .**
27200 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
27210 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
27220 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
27230 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
27240 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
27250 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
27260 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
27270 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
27280 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
27290 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
272a0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
272b0 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
272c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
272d0 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
272e0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
272f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
27300 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
27310 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
27320 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
27330 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
27340 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
27350 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
27360 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
27370 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
27380 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
27390 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
273a0 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
273b0 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
273c0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
273d0 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
273e0 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
273f0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
27400 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
27410 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
27420 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
27430 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
27440 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
27450 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
27460 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
27470 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
27480 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
27490 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
274a0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
274b0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
274c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
274d0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
274e0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
274f0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
27500 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
27510 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
27520 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
27530 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
27540 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
27550 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
27560 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
27570 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
27580 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27590 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
275a0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
275b0 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
275c0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
275d0 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
275e0 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
275f0 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
27600 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
27610 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
27620 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
27630 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
27640 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
27650 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
27660 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
27670 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
27680 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
27690 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
276a0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
276b0 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
276c0 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
276d0 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
276e0 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
276f0 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
27700 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
27710 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
27720 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
27730 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
27740 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
27750 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
27760 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
27770 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
27780 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
27790 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
277a0 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
277b0 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
277c0 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
277d0 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
277e0 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
277f0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
27800 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
27810 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
27820 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
27830 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
27840 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
27850 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
27860 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
27870 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
27880 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
27890 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
278a0 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
278b0 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
278c0 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
278d0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
278e0 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
278f0 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
27900 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
27910 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
27920 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
27930 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
27940 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
27950 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
27960 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
27970 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
27980 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
27990 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
279a0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
279b0 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
279c0 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
279d0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
279e0 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
279f0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
27a00 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
27a10 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
27a20 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
27a30 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
27a40 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
27a50 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
27a60 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
27a70 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
27a80 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
27a90 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
27aa0 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
27ab0 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
27ac0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
27ad0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
27ae0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
27af0 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
27b00 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
27b10 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
27b20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
27b30 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
27b40 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
27b50 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
27b60 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
27b70 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
27b80 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
27b90 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
27ba0 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
27bb0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
27bc0 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
27bd0 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
27be0 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
27bf0 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
27c00 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
27c10 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
27c20 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
27c30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
27c40 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
27c50 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
27c60 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
27c70 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
27c80 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
27c90 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
27ca0 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
27cb0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
27cc0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
27cd0 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
27ce0 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
27cf0 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
27d00 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
27d10 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
27d20 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
27d30 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
27d40 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
27d50 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
27d60 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
27d70 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
27d80 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
27d90 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
27da0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
27db0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
27dc0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
27dd0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
27de0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
27df0 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
27e00 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
27e10 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
27e20 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
27e30 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
27e40 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
27e50 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
27e60 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
27e70 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
27e80 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
27e90 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
27ea0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
27eb0 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
27ec0 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
27ed0 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
27ee0 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
27ef0 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  es a no-op..*/.c
27f00 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
27f10 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
27f20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27f30 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
27f40 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27f50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27f60 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
27f70 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
27f80 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27f90 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
27fa0 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f  C, &res);.  goto
27fb0 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65   next_tail;.case
27fc0 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20   OP_PrevIfOpen: 
27fd0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
27fe0 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  se OP_NextIfOpen
27ff0 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
28000 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
28010 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65  Op->p1]==0 ) bre
28020 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
28030 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50  rough */.case OP
28040 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
28050 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
28060 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
28070 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
28080 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
28090 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
280a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
280b0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
280c0 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
280d0 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
280e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
280f0 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33  .  res = pOp->p3
28100 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
28110 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
28120 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
28130 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
28140 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28150 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
28160 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d  .  assert( res==
28170 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20  0 || (res==1 && 
28180 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20  pC->isTable==0) 
28190 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72  );.  testcase( r
281a0 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  es==1 );.  asser
281b0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
281c0 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
281d0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
281e0 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
281f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28200 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
28210 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
28220 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
28230 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
28240 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28250 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
28260 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
28270 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
28280 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
28290 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
282a0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
282b0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
282c0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
282d0 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
282e0 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
282f0 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
28300 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
28310 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
28320 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
28330 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
28340 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
28350 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
28360 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
28370 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
28380 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
28390 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
283a0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
283b0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
283c0 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
283d0 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
283e0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
283f0 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
28400 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
28410 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
28420 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
28430 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
28440 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
28450 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
28460 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
28470 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
28480 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
28490 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
284a0 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
284b0 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
284c0 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75  vance(pC->uc.pCu
284d0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
284e0 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
284f0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
28500 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
28510 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
28520 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d  0,2);.  if( res=
28530 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
28540 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
28550 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
28560 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
28570 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
28580 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
28590 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
285a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
285b0 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
285c0 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
285d0 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
285e0 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  ow = 1;.  }.  go
285f0 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
28600 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
28610 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
28620 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
28630 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
28640 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
28650 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
28660 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
28670 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
28680 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
28690 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
286a0 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
286b0 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
286c0 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
286d0 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
286e0 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
286f0 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
28700 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
28710 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
28720 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
28730 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
28740 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
28750 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
28760 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
28770 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
28780 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
28790 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
287a0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
287b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
287c0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
287d0 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
287e0 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
287f0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
28800 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
28810 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
28820 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
28830 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68  SULT bit set, th
28840 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
28850 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20  st have.** just 
28860 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74  done a seek to t
28870 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68  he spot where th
28880 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74  e new entry is t
28890 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a  o be inserted..*
288a0 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69  * This flag avoi
288b0 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72  ds doing an extr
288c0 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68  a seek..**.** Th
288d0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
288e0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
288f0 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
28900 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
28910 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
28920 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
28930 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
28940 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
28950 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
28960 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
28970 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
28980 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
28990 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
289a0 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
289b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
289c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
289d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
289e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
289f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28a00 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
28a10 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
28a20 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
28a30 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
28a40 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
28a50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
28a60 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
28a70 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
28a80 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
28a90 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
28aa0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
28ab0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28ac0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
28ad0 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e  E_BTREE || pOp->
28ae0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
28af0 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73  rInsert );.  ass
28b00 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
28b10 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78  ==0 );.  rc = Ex
28b20 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
28b30 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28b40 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 70  _OK ){.    if( p
28b50 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
28b60 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20  orterInsert ){. 
28b70 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
28b80 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
28b90 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20  (pC, pIn2);.    
28ba0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65  }else{.      nKe
28bb0 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
28bc0 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
28bd0 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
28be0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
28bf0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
28c00 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
28c10 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
28c20 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70  .          ((pOp
28c30 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
28c40 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
28c50 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
28c60 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a  0).          );.
28c70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
28c80 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
28c90 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
28ca0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28cb0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
28cc0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
28cd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
28ce0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
28cf0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
28d00 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a   key=r[P2@P3].**
28d10 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
28d20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
28d30 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
28d40 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
28d50 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
28d60 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
28d70 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
28d80 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
28d90 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
28da0 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
28db0 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
28dc0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
28dd0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
28de0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
28df0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
28e00 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
28e10 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
28e20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28e30 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
28e40 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d  +pOp->p3<=(p->nM
28e50 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
28e60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28e70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28e80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28e90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28ea0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28eb0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
28ec0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
28ed0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
28ee0 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
28ef0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
28f00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
28f10 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
28f20 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
28f30 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
28f40 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
28f50 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
28f60 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
28f70 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
28f80 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
28f90 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71  ->p2];.  rc = sq
28fa0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
28fb0 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
28fc0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
28fd0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
28fe0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
28ff0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
29000 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
29010 72 73 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45  rsr, BTREE_AUXDE
29020 4c 45 54 45 29 3b 0a 20 20 7d 0a 20 20 61 73 73  LETE);.  }.  ass
29030 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
29040 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
29050 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
29060 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
29070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29080 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
29090 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
290a0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
290b0 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  wid.**.** Write 
290c0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
290d0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
290e0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
290f0 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
29100 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
29110 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
29120 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
29130 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
29140 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
29150 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
29160 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
29170 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
29180 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
29190 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
291a0 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
291b0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
291c0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
291d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
291e0 74 32 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  t2 */.  BtCursor
291f0 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43   *pCrsr;.  VdbeC
29200 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
29210 20 72 6f 77 69 64 3b 0a 0a 20 20 70 4f 75 74 20   rowid;..  pOut 
29220 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
29230 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
29240 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
29250 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
29260 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
29270 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29290 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
292a0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
292b0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
292c0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
292d0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
292e0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
292f0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
29300 4d 5f 4e 75 6c 6c 3b 0a 20 20 61 73 73 65 72 74  M_Null;.  assert
29310 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
29320 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
29330 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29340 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c  ==0 );..  /* sql
29350 69 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73  ite3VbeCursorRes
29360 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20  tore() can only 
29370 66 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f  fail if the reco
29380 72 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65  rd has been dele
29390 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f  ted.  ** out fro
293a0 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73  m under the curs
293b0 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e  or.  That will n
293c0 65 76 65 72 20 68 61 70 70 65 6e 64 20 66 6f 72  ever happend for
293d0 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a   an IdxRowid.  *
293e0 2a 20 6f 70 63 6f 64 65 2c 20 68 65 6e 63 65 20  * opcode, hence 
293f0 74 68 65 20 4e 45 56 45 52 28 29 20 61 72 72 6f  the NEVER() arro
29400 75 6e 64 20 74 68 65 20 63 68 65 63 6b 20 6f 66  und the check of
29410 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   the return valu
29420 65 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73  e..  */.  rc = s
29430 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
29440 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 69  Restore(pC);.  i
29450 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
29460 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
29470 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
29480 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e  r;..  if( !pC->n
29490 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f  ullRow ){.    ro
294a0 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  wid = 0;  /* Not
294b0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
294c0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
294d0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
294e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
294f0 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
29500 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
29510 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
29520 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
29530 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
29540 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
29550 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
29560 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  d;.    pOut->fla
29570 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
29580 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
29590 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
295a0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
295b0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
295c0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
295d0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
295e0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
295f0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
29600 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
29610 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
29620 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
29630 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
29640 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
29650 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
29660 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
29670 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
29680 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
29690 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
296a0 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
296b0 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
296c0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
296d0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
296e0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
296f0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
29700 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
29710 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
29720 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
29730 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
29740 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
29750 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20  de: IdxGT P1 P2 
29760 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
29770 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
29780 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
29790 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
297a0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
297b0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
297c0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
297d0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
297e0 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f  PRIMARY KEY.  Co
297f0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
29800 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
29810 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
29820 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
29830 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
29840 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
29850 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a  Y KEY or ROWID .
29860 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  ** fields at the
29870 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   end..**.** If t
29880 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
29890 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
298a0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  n the key value.
298b0 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
298c0 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
298d0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
298e0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
298f0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
29900 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50  e: IdxLT P1 P2 P
29910 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
29920 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
29930 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
29940 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
29950 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
29960 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
29970 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
29980 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
29990 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
299a0 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
299b0 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
299c0 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
299d0 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
299e0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
299f0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
29a00 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
29a10 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
29a20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
29a30 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
29a40 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
29a50 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
29a60 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
29a70 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
29a80 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
29a90 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
29aa0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
29ab0 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50  e: IdxLE P1 P2 P
29ac0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
29ad0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
29ae0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
29af0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
29b00 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
29b10 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
29b20 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
29b30 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
29b40 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
29b50 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
29b60 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
29b70 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
29b80 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
29b90 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
29ba0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
29bb0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
29bc0 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
29bd0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
29be0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
29bf0 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
29c00 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
29c10 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
29c20 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  n jump.** to P2.
29c30 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
29c40 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
29c50 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
29c60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
29c70 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  E:          /* j
29c80 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
29c90 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxGT:          /
29ca0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
29cb0 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20  P_IdxLT:        
29cc0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
29cd0 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20  e OP_IdxGE:  {  
29ce0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29cf0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
29d00 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
29d10 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
29d20 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
29d30 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
29d40 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
29d50 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
29d60 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29d70 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
29d80 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
29d90 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
29da0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
29db0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
29dc0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
29dd0 63 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20  c.pCursor!=0);. 
29de0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
29df0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
29e00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29e10 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
29e20 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  5==1 );.  assert
29e30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
29e40 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70  4_INT32 );.  r.p
29e50 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
29e60 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
29e70 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
29e80 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  4.i;.  if( pOp->
29e90 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20  opcode<OP_IdxLT 
29ea0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
29eb0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
29ec0 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
29ed0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
29ee0 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
29ef0 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  c = -1;.  }else{
29f00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
29f10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
29f20 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
29f30 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
29f40 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
29f50 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65  = 0;.  }.  r.aMe
29f60 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
29f70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
29f80 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20  E_DEBUG.  { int 
29f90 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
29fa0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
29fb0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
29fc0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
29fd0 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20  .#endif.  res = 
29fe0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
29ff0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
2a000 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2a010 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
2a020 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
2a030 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26  ompare(db, pC, &
2a040 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  r, &res);.  asse
2a050 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29  rt( (OP_IdxLE&1)
2a060 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26  ==(OP_IdxLT&1) &
2a070 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d  & (OP_IdxGE&1)==
2a080 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a  (OP_IdxGT&1) );.
2a090 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
2a0a0 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  de&1)==(OP_IdxLT
2a0b0 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  &1) ){.    asser
2a0c0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2a0d0 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
2a0e0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2a0f0 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d  T );.    res = -
2a100 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
2a110 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2a120 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
2a130 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2a140 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
2a150 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62  res++;.  }.  Vdb
2a160 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
2a170 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  >0,2);.  if( res
2a180 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2a190 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2a1a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
2a1b0 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
2a1c0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2a1d0 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
2a1e0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2a1f0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2a200 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2a210 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
2a220 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
2a230 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
2a240 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
2a250 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2a260 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
2a270 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
2a280 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
2a290 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
2a2a0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2a2b0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
2a2c0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2a2d0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
2a2e0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
2a2f0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
2a300 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
2a310 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
2a320 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
2a330 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
2a340 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
2a350 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
2a360 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
2a370 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
2a380 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
2a390 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
2a3a0 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
2a3b0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
2a3c0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
2a3d0 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
2a3e0 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
2a3f0 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
2a400 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
2a410 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
2a420 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
2a430 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2a440 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
2a450 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
2a460 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
2a470 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2a480 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
2a490 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
2a4a0 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
2a4b0 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
2a4c0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
2a4d0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
2a4e0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2a4f0 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
2a500 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
2a510 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2a520 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2a530 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
2a540 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
2a550 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2a560 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44  iMoved;.  int iD
2a570 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  b;..  assert( p-
2a580 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2a590 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a5a0 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  1>1 );.  pOut = 
2a5b0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2a5c0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2a5d0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2a5e0 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2a5f0 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2a600 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2a610 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2a620 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2a630 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2a640 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
2a650 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
2a660 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2a670 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2a680 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69  k, iDb) );.    i
2a690 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  Moved = 0;  /* N
2a6a0 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2a6b0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2a6c0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
2a6d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2a6e0 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
2a6f0 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
2a700 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
2a710 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2a720 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
2a730 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
2a740 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a750 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2a760 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2a770 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
2a780 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2a790 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2a7a0 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
2a7b0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
2a7c0 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
2a7d0 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
2a7e0 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
2a7f0 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
2a800 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
2a810 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
2a820 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2a830 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
2a840 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
2a850 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
2a860 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
2a870 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2a880 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
2a890 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
2a8a0 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
2a8b0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2a8c0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2a8d0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
2a8e0 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
2a8f0 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
2a900 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
2a910 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
2a920 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
2a930 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2a940 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
2a950 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2a960 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
2a970 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2a980 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2a990 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
2a9a0 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
2a9b0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2a9c0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2a9d0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2a9e0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2a9f0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2aa00 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2aa10 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2aa20 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2aa30 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
2aa40 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
2aa50 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
2aa60 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
2aa70 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
2aa80 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
2aa90 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
2aaa0 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
2aab0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
2aac0 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
2aad0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2aae0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2aaf0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2ab00 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
2ab10 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
2ab20 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
2ab30 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
2ab40 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
2ab50 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
2ab60 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
2ab70 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2ab80 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2ab90 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
2aba0 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
2abb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
2abc0 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
2abd0 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
2abe0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
2abf0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2ac00 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2ac10 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2ac20 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
2ac30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ac40 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
2ac50 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
2ac60 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
2ac70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
2ac80 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
2ac90 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2aca0 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
2acb0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2acc0 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
2acd0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2ace0 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
2acf0 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
2ad00 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2ad10 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
2ad20 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
2ad30 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
2ad40 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2ad50 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
2ad60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
2ad70 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a  setSorter P1 * *
2ad80 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
2ad90 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66  e all contents f
2ada0 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61  rom the ephemera
2adb0 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65  l table or sorte
2adc0 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65  r.** that is ope
2add0 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a  n on cursor P1..
2ade0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2adf0 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  e only works for
2ae00 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f   cursors used fo
2ae10 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a  r sorting and.**
2ae20 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f   opened with OP_
2ae30 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72  OpenEphemeral or
2ae40 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a   OP_SorterOpen..
2ae50 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
2ae60 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65  Sorter: {.  Vdbe
2ae70 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20  Cursor *pC;. .  
2ae80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2ae90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2aea0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2aeb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2aec0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2aed0 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  pC!=0 );.  if( i
2aee0 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
2aef0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f     sqlite3VdbeSo
2af00 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43  rterReset(db, pC
2af10 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20  ->uc.pSorter);. 
2af20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2af30 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2af40 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2af50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2af60 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29  C->isEphemeral )
2af70 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2af80 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
2af90 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  eOfCursor(pC->uc
2afa0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  .pCursor);.  }. 
2afb0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2afc0 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
2afd0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
2afe0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2aff0 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
2b000 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
2b010 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
2b020 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2b030 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2b040 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
2b050 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2b060 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2b070 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2b080 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2b090 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
2b0a0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2b0b0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
2b0c0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
2b0d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
2b0e0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
2b0f0 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
2b100 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
2b110 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
2b120 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
2b130 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
2b140 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
2b150 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
2b160 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
2b170 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
2b180 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
2b190 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
2b1a0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
2b1b0 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
2b1c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b1d0 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
2b1e0 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
2b1f0 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69  te a new index i
2b200 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2b210 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2b220 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
2b230 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2b240 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2b250 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2b260 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2b270 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
2b280 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2b290 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
2b2a0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
2b2b0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
2b2c0 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
2b2d0 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62   on OP_CreateTab
2b2e0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
2b2f0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
2b300 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2b310 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20  Index:          
2b320 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73    /* out2 */.cas
2b330 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
2b340 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
2b350 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67  out2 */.  int pg
2b360 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b  no;.  int flags;
2b370 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70  .  Db *pDb;..  p
2b380 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2b390 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2b3a0 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
2b3b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2b3c0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2b3d0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
2b3e0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
2b3f0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
2b400 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
2b410 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2b420 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
2b430 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b440 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
2b450 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
2b460 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
2b470 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
2b480 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
2b490 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
2b4a0 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
2b4b0 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
2b4c0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c  flags = BTREE_BL
2b4d0 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20  OBKEY;.  }.  rc 
2b4e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
2b4f0 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
2b500 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
2b510 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
2b520 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
2b530 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2b540 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a  rseSchema P1 * *
2b550 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
2b560 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
2b570 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
2b580 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
2b590 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
2b5a0 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
2b5b0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2b5c0 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  e P4. .**.** Thi
2b5d0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2b5e0 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
2b5f0 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
2b600 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
2b610 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
2b620 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
2b630 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
2b640 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
2b650 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
2b660 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
2b670 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
2b680 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
2b690 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
2b6a0 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
2b6b0 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65  a;..  /* Any pre
2b6c0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2b6d0 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69  that invokes thi
2b6e0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f  s opcode will ho
2b6f0 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20  ld mutexes.  ** 
2b700 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20  on every btree. 
2b710 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65   This is a prere
2b720 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f  quisite for invo
2b730 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74  king .  ** sqlit
2b740 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29  e3InitCallback()
2b750 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
2b760 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
2b770 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e  (iDb=0; iDb<db->
2b780 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20  nDb; iDb++){.   
2b790 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20   assert( iDb==1 
2b7a0 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  || sqlite3BtreeH
2b7b0 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
2b7c0 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
2b7d0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62   }.#endif..  iDb
2b7e0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
2b7f0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
2b800 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
2b810 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72   assert( DbHasPr
2b820 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
2b830 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
2b840 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f   );.  /* Used to
2b850 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61   be a conditiona
2b860 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74  l */ {.    zMast
2b870 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c  er = SCHEMA_TABL
2b880 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74  E(iDb);.    init
2b890 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
2b8a0 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
2b8b0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e   pOp->p1;.    in
2b8c0 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
2b8d0 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
2b8e0 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
2b8f0 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
2b900 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
2b910 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
2b920 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
2b930 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
2b940 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
2b950 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65  ->aDb[iDb].zName
2b960 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
2b970 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a  p4.z);.    if( z
2b980 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
2b990 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2b9a0 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  M;.    }else{.  
2b9b0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
2b9c0 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
2b9d0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
2b9e0 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  usy = 1;.      i
2b9f0 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c  nitData.rc = SQL
2ba00 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73  ITE_OK;.      as
2ba10 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
2ba20 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
2ba30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2ba40 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
2ba50 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2ba60 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
2ba70 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2ba80 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
2ba90 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20  initData.rc;.   
2baa0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
2bab0 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  (db, zSql);.    
2bac0 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2bad0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
2bae0 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65   if( rc ) sqlite
2baf0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
2bb00 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
2bb10 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2bb20 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
2bb30 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2bb40 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
2bb50 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2bb60 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2bb70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
2bb80 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
2bb90 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
2bba0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
2bbb0 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
2bbc0 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
2bbd0 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
2bbe0 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
2bbf0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
2bc00 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
2bc10 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
2bc20 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
2bc30 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
2bc40 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
2bc50 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
2bc60 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
2bc70 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
2bc80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bc90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2bca0 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
2bcb0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
2bcc0 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
2bcd0 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
2bce0 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
2bcf0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
2bd00 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
2bd10 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
2bd20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2bd30 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2bd40 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2bd50 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2bd60 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2bd70 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
2bd80 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2bd90 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2bda0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
2bdb0 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
2bdc0 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2bdd0 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2bde0 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
2bdf0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
2be00 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2be10 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2be20 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2be30 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2be40 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2be50 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
2be60 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2be70 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
2be80 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2be90 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2bea0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2beb0 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
2bec0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2bed0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2bee0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2bef0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2bf00 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2bf10 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
2bf20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2bf30 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2bf40 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
2bf50 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2bf60 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2bf70 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2bf80 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f  ).** in order to
2bf90 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
2bfa0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2bfb0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2bfc0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2bfd0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2bfe0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2bff0 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
2c000 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2c010 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
2c020 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2c030 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2c040 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
2c050 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
2c060 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2c070 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2c080 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2c090 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2c0a0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
2c0b0 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
2c0c0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
2c0d0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
2c0e0 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
2c0f0 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2c100 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2c110 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2c120 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2c130 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2c140 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2c150 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2c160 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2c170 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2c180 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2c190 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
2c1a0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2c1b0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62  DeleteTrigger(db
2c1c0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2c1d0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2c1e0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
2c1f0 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
2c200 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64  Y_CHECK./* Opcod
2c210 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50  e: IntegrityCk P
2c220 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
2c230 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
2c240 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
2c250 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
2c260 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
2c270 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
2c280 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
2c290 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
2c2a0 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
2c2b0 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
2c2c0 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
2c2d0 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
2c2e0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2c2f0 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
2c300 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61   contains the ma
2c310 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
2c320 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
2c330 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
2c340 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
2c350 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
2c360 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2c370 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
2c380 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
2c390 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
2c3a0 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
2c3b0 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
2c3c0 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
2c3d0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2c3e0 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
2c3f0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
2c400 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
2c410 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
2c420 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72   integer.** stor
2c430 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72  ed in reg(P1), r
2c440 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31  eg(P1+1), reg(P1
2c450 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65  +2), ....  There
2c460 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a   are P2 tables.*
2c470 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49  * total..**.** I
2c480 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
2c490 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
2c4a0 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
2c4b0 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
2c4c0 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
2c4d0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2c4e0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
2c4f0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
2c500 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
2c510 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
2c520 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
2c530 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
2c540 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
2c550 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
2c560 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
2c570 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
2c580 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
2c590 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
2c5a0 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
2c5b0 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
2c5c0 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
2c5d0 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  ked */.  int j; 
2c5e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2c5f0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
2c600 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a  t nErr;       /*
2c610 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
2c620 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20  s reported */.  
2c630 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20  char *z;        
2c640 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65  /* Text of the e
2c650 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20  rror report */. 
2c660 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20   Mem *pnErr;    
2c670 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65   /* Register kee
2c680 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72  ping track of er
2c690 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a  rors remaining *
2c6a0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2c6b0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e  bIsReader );.  n
2c6c0 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
2c6d0 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
2c6e0 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
2c6f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
2c700 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
2c710 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
2c720 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
2c730 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
2c740 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2c750 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2c760 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2c770 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
2c780 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2c790 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2c7a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2c7b0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
2c7c0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2c7d0 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
2c7e0 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
2c7f0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2c800 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
2c810 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
2c820 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
2c830 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
2c840 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
2c850 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
2c860 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2c870 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
2c880 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2c890 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2c8a0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
2c8b0 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
2c8c0 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
2c8d0 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
2c8e0 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
2c8f0 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
2c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c910 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
2c920 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
2c930 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
2c940 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
2c950 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
2c960 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
2c970 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2c980 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
2c990 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
2c9a0 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
2c9b0 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
2c9c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
2c9d0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
2c9e0 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
2c9f0 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
2ca00 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
2ca10 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
2ca20 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2ca30 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
2ca40 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2ca50 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
2ca60 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
2ca70 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ca80 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
2ca90 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
2caa0 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
2cab0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2cac0 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28  nopsis:  rowset(
2cad0 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2cae0 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2caf0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2cb00 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2cb10 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
2cb20 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
2cb30 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2cb40 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2cb50 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2cb60 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2cb70 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2cb80 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2cb90 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2cba0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2cbb0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2cbc0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2cbd0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2cbe0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2cbf0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2cc00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2cc10 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2cc20 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2cc30 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2cc40 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2cc50 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2cc60 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2cc70 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2cc80 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2cc90 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2cca0 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2ccb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ccc0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2ccd0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2cce0 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73  sis:  r[P3]=rows
2ccf0 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
2cd00 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
2cd10 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
2cd20 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
2cd30 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
2cd40 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2cd50 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
2cd60 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
2cd70 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2cd80 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
2cd90 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
2cda0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2cdb0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2cdc0 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
2cdd0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2cde0 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
2cdf0 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  val;..  pIn1 = &
2ce00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ce10 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2ce20 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2ce30 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
2ce40 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31  3RowSetNext(pIn1
2ce50 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
2ce60 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
2ce70 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
2ce80 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
2ce90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2cea0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2ceb0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2cec0 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67  aken(1,2);.    g
2ced0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
2cee0 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
2cef0 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
2cf00 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
2cf10 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
2cf20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
2cf30 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2cf40 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74  (0,2);.    sqlit
2cf50 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2cf60 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2cf70 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f  , val);.  }.  go
2cf80 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2cf90 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2cfa0 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
2cfb0 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
2cfc0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2cfd0 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29  3] in rowset(P1)
2cfe0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2cff0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
2d000 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
2d010 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
2d020 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
2d030 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
2d040 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
2d050 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
2d060 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
2d070 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
2d080 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
2d090 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
2d0a0 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
2d0b0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
2d0c0 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
2d0d0 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
2d0e0 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
2d0f0 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
2d100 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
2d110 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
2d120 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
2d130 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
2d140 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
2d150 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
2d160 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
2d170 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
2d180 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
2d190 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
2d1a0 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
2d1b0 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
2d1c0 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
2d1d0 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
2d1e0 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
2d1f0 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
2d200 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
2d210 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
2d220 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
2d230 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
2d240 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
2d250 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
2d260 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
2d270 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
2d280 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
2d290 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2d2a0 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
2d2b0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
2d2c0 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
2d2d0 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
2d2e0 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
2d2f0 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
2d300 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2d310 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
2d320 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
2d330 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
2d340 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
2d350 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
2d360 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
2d370 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
2d380 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
2d390 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
2d3a0 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
2d3b0 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
2d3c0 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
2d3d0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
2d3e0 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
2d3f0 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
2d400 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
2d410 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
2d420 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
2d430 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
2d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d450 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2d460 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
2d470 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
2d480 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  s;..  pIn1 = &aM
2d490 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
2d4a0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
2d4b0 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70  >p3];.  iSet = p
2d4c0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65  Op->p4.i;.  asse
2d4d0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26  rt( pIn3->flags&
2d4e0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a  MEM_Int );..  /*
2d4f0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   If there is any
2d500 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
2d510 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74   a rowset object
2d520 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
2d530 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20  P1,.  ** delete 
2d540 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69  it now and initi
2d550 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e  alize P1 with an
2d560 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20   empty rowset.  
2d570 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
2d580 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2d590 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2d5a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2d5b0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2d5c0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2d5d0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2d5e0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2d5f0 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
2d600 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2d610 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
2d620 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20  rt( iSet==-1 || 
2d630 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28  iSet>=0 );.  if(
2d640 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69   iSet ){.    exi
2d650 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77  sts = sqlite3Row
2d660 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e  SetTest(pIn1->u.
2d670 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70  pRowSet, iSet, p
2d680 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56  In3->u.i);.    V
2d690 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65  dbeBranchTaken(e
2d6a0 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
2d6b0 20 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f   if( exists ) go
2d6c0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2d6d0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
2d6e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2d6f0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2d700 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2d710 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
2d720 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2d730 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2d740 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
2d750 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
2d760 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
2d770 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
2d780 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
2d790 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
2d7a0 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
2d7b0 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
2d7c0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
2d7d0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2d7e0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2d7f0 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
2d800 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
2d810 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
2d820 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
2d830 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
2d840 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
2d850 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2d860 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
2d870 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
2d880 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
2d890 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
2d8a0 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
2d8b0 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
2d8c0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2d8d0 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
2d8e0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2d8f0 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
2d900 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
2d910 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
2d920 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
2d930 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
2d940 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
2d950 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
2d960 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2d970 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
2d980 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2d990 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
2d9a0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2d9b0 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
2d9c0 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
2d9d0 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
2d9e0 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
2d9f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2da00 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2da20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
2da30 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
2da40 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2da50 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
2da60 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
2da70 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
2da80 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
2da90 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2daa0 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
2dab0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
2dac0 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
2dad0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
2dae0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2daf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2db00 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
2db10 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
2db20 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
2db30 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2db40 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
2db50 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
2db60 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2db70 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
2db80 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
2db90 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
2dba0 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
2dbb0 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
2dbc0 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
2dbd0 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
2dbe0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2dbf0 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
2dc00 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
2dc10 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
2dc20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
2dc30 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
2dc40 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2dc50 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
2dc60 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
2dc70 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
2dc80 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
2dc90 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2dca0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
2dcb0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
2dcc0 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
2dcd0 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
2dce0 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
2dcf0 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
2dd00 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
2dd10 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
2dd20 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
2dd30 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
2dd40 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
2dd50 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
2dd60 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
2dd70 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
2dd80 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
2dd90 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
2dda0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
2ddb0 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
2ddc0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
2ddd0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2dde0 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
2ddf0 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
2de00 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
2de10 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
2de20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
2de30 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
2de40 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
2de50 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
2de60 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
2de70 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
2de80 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
2de90 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
2dea0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2deb0 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
2dec0 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
2ded0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
2dee0 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
2def0 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
2df00 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
2df10 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
2df20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
2df30 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
2df40 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2df50 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
2df60 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
2df70 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2df80 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
2df90 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
2dfa0 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
2dfb0 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
2dfc0 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
2dfd0 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
2dfe0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2dff0 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  R;.    sqlite3Vd
2e000 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20  beError(p, "too 
2e010 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
2e020 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
2e030 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ");.    break;. 
2e040 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
2e050 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
2e060 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
2e070 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
2e080 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
2e090 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
2e0a0 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
2e0b0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2e0c0 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
2e0d0 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
2e0e0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2e0f0 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
2e100 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
2e110 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
2e120 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
2e130 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
2e140 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
2e150 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
2e160 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
2e170 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
2e180 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
2e190 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
2e1a0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
2e1b0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
2e1c0 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
2e1d0 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
2e1e0 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
2e1f0 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
2e200 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
2e210 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
2e220 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
2e230 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
2e240 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
2e250 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
2e260 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
2e270 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
2e280 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
2e290 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
2e2a0 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
2e2b0 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
2e2c0 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
2e2d0 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20  nCsr;.    nByte 
2e2e0 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2e2f0 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2e300 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2e310 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2e320 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2e330 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2e340 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2e350 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2e360 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2e370 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2e380 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2e390 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2e3a0 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2e3b0 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2e3c0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2e3d0 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2e3e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2e3f0 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2e400 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2e410 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2e420 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2e430 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2e440 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2e450 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2e460 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2e470 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2e480 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2e490 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28    pFrame->pc = (
2e4a0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
2e4b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2e4c0 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2e4d0 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2e4e0 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2e4f0 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2e500 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2e510 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2e520 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2e530 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2e540 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2e550 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2e560 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2e570 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2e580 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2e590 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2e5a0 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2e5b0 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2e5c0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69  p->nOnceFlag;.#i
2e5d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2e5e0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2e5f0 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
2e600 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
2e610 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  c;.#endif..    p
2e620 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
2e630 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
2e640 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
2e650 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
2e660 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2e670 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
2e680 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
2e690 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
2e6a0 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
2e6b0 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
2e6c0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2e6d0 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d     pFrame = pRt-
2e6e0 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61  >u.pFrame;.    a
2e6f0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2e700 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
2e710 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2e720 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61  hildMem );.    a
2e730 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2e740 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2e750 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20  ChildCsr );.    
2e760 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f  assert( (int)(pO
2e770 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65  p - aOp)==pFrame
2e780 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
2e790 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
2e7a0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
2e7b0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
2e7c0 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
2e7d0 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46   lastRowid;.  pF
2e7e0 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
2e7f0 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
2e800 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
2e810 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
2e820 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
2e830 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
2e840 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
2e850 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
2e860 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2e870 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
2e880 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2e890 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2e8a0 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2e8b0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2e8c0 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2e8d0 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2e8e0 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
2e8f0 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
2e900 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
2e910 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
2e920 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65  >nOp;.  p->aOnce
2e930 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d  Flag = (u8 *)&p-
2e940 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f  >apCsr[p->nCurso
2e950 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c  r];.  p->nOnceFl
2e960 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ag = pProgram->n
2e970 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c  Once;.#ifdef SQL
2e980 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2e990 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e  SCANSTATUS.  p->
2e9a0 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64  anExec = 0;.#end
2e9b0 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  if.  pOp = &aOp[
2e9c0 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d  -1];.  memset(p-
2e9d0 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70  >aOnceFlag, 0, p
2e9e0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20  ->nOnceFlag);.. 
2e9f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2ea00 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
2ea10 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2ea20 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
2ea30 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
2ea40 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
2ea50 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
2ea60 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
2ea70 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
2ea80 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
2ea90 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
2eaa0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
2eab0 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
2eac0 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
2ead0 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
2eae0 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
2eaf0 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
2eb00 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
2eb10 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
2eb20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
2eb30 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
2eb40 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
2eb50 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
2eb60 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
2eb70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
2eb80 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
2eb90 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
2eba0 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2ebb0 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
2ebc0 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2ebd0 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
2ebe0 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
2ebf0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2ec00 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
2ec10 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
2ec20 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ut2 */.  VdbeFra
2ec30 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
2ec40 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d  m *pIn;.  pOut =
2ec50 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2ec60 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d  p, pOp);.  pFram
2ec70 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
2ec80 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e   pIn = &pFrame->
2ec90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70  aMem[pOp->p1 + p
2eca0 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d  Frame->aOp[pFram
2ecb0 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20  e->pc].p1];   . 
2ecc0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ecd0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
2ece0 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29   pIn, MEM_Ephem)
2ecf0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65  ;.  break;.}..#e
2ed00 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
2ed10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2ed20 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
2ed30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2ed40 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64  IGN_KEY./* Opcod
2ed50 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20  e: FkCounter P1 
2ed60 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2ed70 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b  psis: fkctr[P1]+
2ed80 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  =P2.**.** Increm
2ed90 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
2eda0 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
2edb0 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
2edc0 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
2edd0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
2ede0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
2edf0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2ee00 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2ee10 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
2ee20 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
2ee30 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
2ee40 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
2ee50 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
2ee60 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
2ee70 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2ee80 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
2ee90 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2eea0 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
2eeb0 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
2eec0 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
2eed0 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  & SQLITE_DeferFK
2eee0 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  s ){.    db->nDe
2eef0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d  ferredImmCons +=
2ef00 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2ef10 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b  e if( pOp->p1 ){
2ef20 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2ef30 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
2ef40 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
2ef50 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2ef60 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2ef70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ef80 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
2ef90 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2efa0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63  Synopsis: if fkc
2efb0 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50  tr[P1]==0 goto P
2efc0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
2efd0 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66  ode tests if a f
2efe0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2eff0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
2f000 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e   currently zero.
2f010 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20  .** If so, jump 
2f020 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
2f030 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2f040 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2f050 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72  e next .** instr
2f060 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
2f070 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2f080 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69   then the jump i
2f090 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64  s taken if the d
2f0a0 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2f0b0 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73  nt-counter.** is
2f0c0 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74   zero (the one t
2f0d0 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72  hat counts defer
2f0e0 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  red constraint v
2f0f0 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50  iolations). If P
2f100 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  1 is.** zero, th
2f110 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2f120 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  if the statement
2f130 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2f140 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28  ter is zero.** (
2f150 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2f160 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2f170 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f   violations)..*/
2f180 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72  .case OP_FkIfZer
2f190 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  o: {         /* 
2f1a0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f  jump */.  if( pO
2f1b0 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62  p->p1 ){.    Vdb
2f1c0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d  eBranchTaken(db-
2f1d0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2f1e0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2f1f0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2f200 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  ;.    if( db->nD
2f210 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2f220 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2f230 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
2f240 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2f250 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
2f260 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b  anchTaken(p->nFk
2f270 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2f280 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2f290 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
2f2a0 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73    if( p->nFkCons
2f2b0 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
2f2c0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2f2d0 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s==0 ) goto jump
2f2e0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
2f2f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2f300 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2f310 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2f320 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2f330 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2f340 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
2f350 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
2f360 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f370 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31  : r[P1]=max(r[P1
2f380 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50  ],r[P2]).**.** P
2f390 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
2f3a0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
2f3b0 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
2f3c0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
2f3d0 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
2f3e0 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
2f3f0 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
2f400 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
2f410 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
2f420 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
2f430 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
2f440 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2f450 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
2f460 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
2f470 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
2f480 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2f490 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
2f4a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
2f4b0 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2f4c0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2f4d0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
2f4e0 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
2f4f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
2f500 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
2f510 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  in2 */.  VdbeFra
2f520 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66  me *pFrame;.  if
2f530 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
2f540 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
2f550 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
2f560 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
2f570 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2f580 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70  );.    pIn1 = &p
2f590 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2f5a0 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >p1];.  }else{. 
2f5b0 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b     pIn1 = &aMem[
2f5c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20  pOp->p1];.  }.  
2f5d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2f5e0 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71  id(pIn1) );.  sq
2f5f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2f600 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
2f610 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2f620 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
2f630 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
2f640 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
2f650 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
2f660 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
2f670 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
2f680 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2f690 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f6a0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2f6b0 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
2f6c0 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33  : IfPos P1 P2 P3
2f6d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f6e0 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65  : if r[P1]>0 the
2f6f0 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74  n r[P1]-=P3, got
2f700 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2f710 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2f720 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
2f730 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2f740 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2f750 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2f760 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d  subtract P3 from
2f770 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
2f780 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20   P1 and jump to 
2f790 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
2f7a0 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
2f7b0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2f7c0 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68   less than 1, th
2f7d0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
2f7e0 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  is unchanged and
2f7f0 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20   control passes 
2f800 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2f810 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2f820 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2f830 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2f840 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2f850 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2f860 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f870 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2f880 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2f890 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75  chTaken( pIn1->u
2f8a0 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i>0, 2);.  if( 
2f8b0 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
2f8c0 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20     pIn1->u.i -= 
2f8d0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74  pOp->p3;.    got
2f8e0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2f8f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2f900 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c   Opcode: OffsetL
2f910 69 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20  imit P1 P2 P3 * 
2f920 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2f930 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72  f r[P1]>0 then r
2f940 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30  [P2]=r[P1]+max(0
2f950 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50  ,r[P3]) else r[P
2f960 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68  2]=(-1).**.** Th
2f970 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  is opcode perfor
2f980 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73  ms a commonly us
2f990 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61  ed computation a
2f9a0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a  ssociated with.*
2f9b0 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  * LIMIT and OFFS
2f9c0 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50  ET process.  r[P
2f9d0 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d  1] holds the lim
2f9e0 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50  it counter.  r[P
2f9f0 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20  3].** holds the 
2fa00 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20  offset counter. 
2fa10 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70   The opcode comp
2fa20 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65  utes the combine
2fa30 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68  d value.** of th
2fa40 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
2fa50 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68  ET and stores th
2fa60 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32  at value in r[P2
2fa70 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a  ].  The r[P2].**
2fa80 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20   value computed 
2fa90 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  is the total num
2faa0 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
2fab0 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
2fac0 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f  .** visited in o
2fad0 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65  rder to complete
2fae0 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a   the query..**.*
2faf0 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65  * If r[P3] is ze
2fb00 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20  ro or negative, 
2fb10 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65  that means there
2fb20 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a   is no OFFSET.**
2fb30 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65   and r[P2] is se
2fb40 74 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75  t to be the valu
2fb50 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20  e of the LIMIT, 
2fb60 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20  r[P1]..**.** if 
2fb70 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72  r[P1] is zero or
2fb80 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20   negative, that 
2fb90 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e  means there is n
2fba0 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72  o LIMIT.** and r
2fbb0 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d  [P2] is set to -
2fbc0 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77  1. .**.** Otherw
2fbd0 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65  ise, r[P2] is se
2fbe0 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20  t to the sum of 
2fbf0 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e  r[P1] and r[P3].
2fc00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73  .*/.case OP_Offs
2fc10 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a  etLimit: {    /*
2fc20 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20   in1, out2, in3 
2fc30 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2fc40 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2fc50 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2fc60 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  p3];.  pOut = ou
2fc70 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2fc80 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
2fc90 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2fca0 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
2fcb0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
2fcc0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f   MEM_Int );.  pO
2fcd0 75 74 2d 3e 75 2e 69 20 3d 20 70 49 6e 31 2d 3e  ut->u.i = pIn1->
2fce0 75 2e 69 3c 3d 30 20 3f 20 2d 31 20 3a 20 70 49  u.i<=0 ? -1 : pI
2fcf0 6e 31 2d 3e 75 2e 69 2b 28 70 49 6e 33 2d 3e 75  n1->u.i+(pIn3->u
2fd00 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30  .i>0?pIn3->u.i:0
2fd10 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2fd20 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a  * Opcode: IfNotZ
2fd30 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ero P1 P2 P3 * *
2fd40 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2fd50 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72   r[P1]!=0 then r
2fd60 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50  [P1]-=P3, goto P
2fd70 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2fd80 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2fd90 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
2fda0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
2fdb0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a  register P1 is.*
2fdc0 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a  * initially nonz
2fdd0 65 72 6f 2c 20 74 68 65 6e 20 73 75 62 74 72 61  ero, then subtra
2fde0 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 20 76  ct P3 from the v
2fdf0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
2fe00 20 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20   P1 and.** jump 
2fe10 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69 73  to P2.  If regis
2fe20 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61  ter P1 is initia
2fe30 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20  lly zero, leave 
2fe40 69 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a 20  it unchanged.** 
2fe50 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
2fe60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
2fe70 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  otZero: {       
2fe80 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2fe90 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2fea0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2feb0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2fec0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
2fed0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2fee0 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20  1->u.i<0, 2);.  
2fef0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  if( pIn1->u.i ){
2ff00 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .     pIn1->u.i 
2ff10 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20  -= pOp->p3;.    
2ff20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2ff30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2ff40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
2ff50 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
2ff60 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2ff70 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
2ff80 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
2ff90 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
2ffa0 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
2ffb0 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
2ffc0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2ffd0 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a  ter P1.** then j
2ffe0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
2fff0 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
30000 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
30010 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
30020 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
30030 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
30040 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
30050 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
30060 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
30070 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
30080 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  i--;.  VdbeBranc
30090 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
300a0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  ==0, 2);.  if( p
300b0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f  In1->u.i==0 ) go
300c0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
300d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
300e0 70 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49  pcode: JumpZeroI
300f0 6e 63 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ncr P1 P2 * * *.
30100 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
30110 28 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67  (r[P1]++)==0 ) g
30120 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  oto P2.**.** The
30130 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
30140 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
30150 65 67 65 72 2e 20 20 49 66 20 72 65 67 69 73 74  eger.  If regist
30160 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c  er P1 is initial
30170 6c 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e  ly.** zero, then
30180 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e   jump to P2.  In
30190 63 72 65 6d 65 6e 74 20 72 65 67 69 73 74 65 72  crement register
301a0 20 50 31 20 72 65 67 61 72 64 6c 65 73 73 20 6f   P1 regardless o
301b0 66 20 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20  f whether or.** 
301c0 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  not the jump is 
301d0 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  taken..*/.case O
301e0 50 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20  P_JumpZeroIncr: 
301f0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
30200 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
30210 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
30220 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
30230 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
30240 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
30250 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
30260 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
30270 6e 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 20  n1->u.i++)==0 ) 
30280 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
30290 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
302a0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30  Opcode: AggStep0
302b0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
302c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
302d0 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
302e0 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
302f0 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
30300 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
30310 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
30320 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
30330 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
30340 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
30350 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
30360 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
30370 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
30380 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
30390 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
303a0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
303b0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
303c0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
303d0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
303e0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
303f0 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
30400 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
30410 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
30420 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
30430 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
30440 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
30450 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
30460 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
30470 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
30480 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
30490 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
304a0 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
304b0 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20  ite3_context.** 
304c0 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75  object that is u
304d0 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66  sed to run the f
304e0 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
304f0 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74  er P3 is.** as t
30500 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
30510 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
30520 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
30530 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
30540 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
30550 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
30560 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
30570 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
30580 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
30590 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
305a0 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
305b0 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
305c0 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
305d0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
305e0 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
305f0 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
30600 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
30610 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
30620 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
30630 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
30640 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
30650 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
30660 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
30670 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
30680 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
30690 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  Step0: {.  int n
306a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
306b0 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
306c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
306d0 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
306e0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
306f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
30700 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
30710 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
30720 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
30730 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
30740 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
30750 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  n<=(p->nMem-p->n
30760 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20  Cursor)+1) );.  
30770 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
30780 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
30790 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
307a0 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65  .  pCtx = sqlite
307b0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
307c0 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b   sizeof(*pCtx) +
307d0 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71   (n-1)*sizeof(sq
307e0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a  lite3_value*));.
307f0 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20    if( pCtx==0 ) 
30800 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
30810 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20  Ctx->pMem = 0;. 
30820 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
30830 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
30840 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
30850 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
30860 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
30870 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
30880 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
30890 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
308a0 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
308b0 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pCtx;.  pOp->opc
308c0 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
308d0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
308e0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
308f0 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
30900 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
30910 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
30920 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
30930 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
30940 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   t;..  assert( p
30950 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
30960 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
30970 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
30980 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
30990 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p3];..  /* 
309a0 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  If this function
309b0 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20   is inside of a 
309c0 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67  trigger, the reg
309d0 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61  ister array in a
309e0 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74  Mem[].  ** might
309f0 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
30a00 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74   evaluation to t
30a10 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65  he next.  The ne
30a20 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
30a30 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  .  ** checks to 
30a40 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73  see if the regis
30a50 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68  ter array has ch
30a60 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f  anged, and if so
30a70 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69   it.  ** reiniti
30a80 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76  alizes the relav
30a90 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65  ant parts of the
30aa0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
30ab0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28   object */.  if(
30ac0 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70   pCtx->pMem != p
30ad0 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Mem ){.    pCtx-
30ae0 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20  >pMem = pMem;.  
30af0 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
30b00 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
30b10 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
30b20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
30b30 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  ];.  }..#ifdef S
30b40 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
30b50 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
30b60 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
30b70 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
30b80 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
30b90 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
30ba0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
30bb0 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
30bc0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
30bd0 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c  pMem->n++;.  sql
30be0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28  ite3VdbeMemInit(
30bf0 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  &t, db, MEM_Null
30c00 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  );.  pCtx->pOut 
30c10 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45  = &t;.  pCtx->fE
30c20 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
30c30 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
30c40 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46  = 0;.  (pCtx->pF
30c50 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
30c60 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
30c70 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
30c80 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
30c90 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
30ca0 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
30cb0 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
30cc0 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
30cd0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
30ce0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
30cf0 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a  alue_text(&t));.
30d00 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d        rc = pCtx-
30d10 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  >isError;.    }.
30d20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
30d30 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20  emRelease(&t);. 
30d40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
30d50 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d  rt( t.flags==MEM
30d60 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69  _Null );.  }.  i
30d70 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  f( pCtx->skipFla
30d80 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
30d90 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
30da0 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
30db0 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
30dc0 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
30dd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
30de0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
30df0 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
30e00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
30e10 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
30e20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
30e30 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
30e40 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
30e50 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
30e60 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
30e70 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
30e80 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
30e90 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
30ea0 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
30eb0 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
30ec0 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
30ed0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
30ee0 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
30ef0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
30f00 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
30f10 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
30f20 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
30f30 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
30f40 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
30f50 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
30f60 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
30f70 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
30f80 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
30f90 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
30fa0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
30fb0 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
30fc0 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
30fd0 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
30fe0 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
30ff0 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
31000 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
31010 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
31020 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
31030 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
31040 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
31050 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
31060 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
31070 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
31080 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
31090 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  ) );.  pMem = &a
310a0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
310b0 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
310c0 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
310d0 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
310e0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
310f0 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
31100 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
31110 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
31120 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
31130 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
31140 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
31150 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
31160 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
31170 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
31180 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
31190 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
311a0 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
311b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
311c0 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
311d0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
311e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
311f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31200 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
31210 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
31220 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
31230 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
31240 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
31250 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
31260 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
31270 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
31280 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
31290 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
312a0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
312b0 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52   FULL,.** RESTAR
312c0 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20  T, or TRUNCATE. 
312d0 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
312e0 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
312f0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
31300 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
31310 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
31320 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
31330 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
31340 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
31350 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
31360 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
31370 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
31380 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
31390 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
313a0 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
313b0 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
313c0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
313d0 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
313e0 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
313f0 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
31400 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
31410 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
31420 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
31430 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
31440 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
31450 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
31470 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
31480 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
31490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314a0 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
314b0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314d0 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
314e0 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
314f0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
31500 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
31510 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
31520 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
31530 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
31540 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
31550 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
31560 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
31570 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
31580 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
31590 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
315a0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
315b0 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20  START.       || 
315c0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
315d0 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
315e0 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ATE.  );.  rc = 
315f0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
31600 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
31610 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
31620 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
31630 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
31640 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
31650 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
31660 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
31670 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
31680 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
31690 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
316a0 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
316b0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
316c0 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
316d0 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
316e0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
316f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
31700 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
31710 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
31720 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
31730 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
31740 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
31750 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
31760 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
31770 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
31780 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
31790 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
317a0 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
317b0 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
317c0 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
317d0 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
317e0 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
317f0 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
31800 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
31810 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
31820 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
31830 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
31840 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
31850 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
31860 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
31870 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
31880 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
31890 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
318a0 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
318b0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
318c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
318d0 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
318e0 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65   out2 */.  Btree
318f0 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
31900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
31910 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
31920 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
31930 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
31940 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
31950 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
31960 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
31970 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31990 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
319a0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
319b0 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
319c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
319d0 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
319e0 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
319f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
31a00 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
31a10 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
31a20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
31a30 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
31a40 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
31a50 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
31a60 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
31a70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  );.  eNew = pOp-
31a80 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
31a90 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
31aa0 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
31ab0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
31ac0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
31ad0 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
31ae0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
31af0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
31b00 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
31b10 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
31b20 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
31b30 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
31b40 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
31b50 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
31b60 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
31b70 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
31b80 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
31b90 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
31ba0 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
31bb0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
31bc0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
31bd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
31be0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
31bf0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
31c00 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
31c10 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
31c20 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
31c30 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
31c40 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
31c50 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
31c60 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
31c70 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
31c80 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
31c90 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
31ca0 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
31cb0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
31cc0 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
31cd0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
31ce0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
31cf0 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
31d00 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
31d10 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
31d20 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
31d30 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
31d40 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
31d50 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
31d60 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
31d70 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
31d80 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
31d90 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
31da0 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
31db0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
31dc0 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
31dd0 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
31de0 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
31df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
31e00 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
31e10 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
31e20 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
31e30 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
31e40 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
31e50 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
31e60 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
31e70 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
31e80 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
31e90 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
31ea0 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
31eb0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
31ec0 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
31ed0 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
31ee0 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
31ef0 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
31f00 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
31f10 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
31f20 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
31f30 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
31f40 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
31f50 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
31f60 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
31f70 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
31f80 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
31f90 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
31fa0 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
31fb0 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b    );.      break
31fc0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20  ;.    }else{. . 
31fd0 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50       if( eOld==P
31fe0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
31ff0 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  _WAL ){.        
32000 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41  /* If leaving WA
32010 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68  L mode, close th
32020 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73  e log file. If s
32030 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63  uccessful, the c
32040 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  all.        ** t
32050 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  o PagerCloseWal(
32060 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e  ) checkpoints an
32070 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72  d deletes the wr
32080 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20  ite-ahead-log . 
32090 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20         ** file. 
320a0 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63  An EXCLUSIVE loc
320b0 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68  k may still be h
320c0 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  eld on the datab
320d0 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20  ase file .      
320e0 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63    ** after a suc
320f0 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20  cessful return. 
32100 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
32110 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
32120 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50  PagerCloseWal(pP
32130 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69  ager);.        i
32140 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
32150 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
32160 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
32170 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
32180 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20   eNew);.        
32190 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  }.      }else if
321a0 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
321b0 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
321c0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43   ){.        /* C
321d0 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e  annot transition
321e0 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d   directly from M
321f0 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55  EMORY to WAL.  U
32200 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20  se mode OFF.    
32210 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74      ** as an int
32220 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20  ermediate */.   
32230 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
32240 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
32250 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f  pPager, PAGER_JO
32260 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a  URNALMODE_OFF);.
32270 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
32280 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73   /* Open a trans
32290 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61  action on the da
322a0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67  tabase file. Reg
322b0 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a  ardless of the j
322c0 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ournal.      ** 
322d0 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73  mode, this trans
322e0 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73  action always us
322f0 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
32300 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  urnal..      */.
32310 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
32320 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
32330 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20  ans(pBt)==0 );. 
32340 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
32350 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
32360 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
32370 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42  reeSetVersion(pB
32380 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f  t, (eNew==PAGER_
32390 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
323a0 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20  ? 2 : 1));.     
323b0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e   }.    }.  }.#en
323c0 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51  dif /* ifndef SQ
323d0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f  LITE_OMIT_WAL */
323e0 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ..  if( rc ){.  
323f0 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
32400 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69   }.  eNew = sqli
32410 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
32420 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
32430 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66  New);..  pOut->f
32440 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
32450 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
32460 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
32470 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
32480 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
32490 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
324a0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
324b0 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
324c0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
324d0 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
324e0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
324f0 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
32500 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  g);.  break;.};.
32510 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
32520 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
32530 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
32540 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
32550 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
32560 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
32570 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
32580 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
32590 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
325a0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
325b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
325c0 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
325d0 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
325e0 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
325f0 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
32600 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
32610 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
32620 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
32630 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
32640 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  {.  assert( p->r
32650 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
32660 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
32670 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
32680 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
32690 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
326a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
326b0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
326c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
326d0 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
326e0 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
326f0 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
32700 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
32710 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
32720 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
32730 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
32740 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
32750 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
32760 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
32770 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
32780 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
32790 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
327a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
327b0 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
327c0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
327d0 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
327e0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
327f0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
32800 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
32810 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
32820 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
32830 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
32840 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
32850 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
32860 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
32870 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
32880 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74  eeIncrVacuum(pBt
32890 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
328a0 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
328b0 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72  DONE,2);.  if( r
328c0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
328d0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
328e0 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  E_OK;.    goto j
328f0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
32900 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
32910 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
32920 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
32930 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
32940 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
32950 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68  s to expire.  Wh
32960 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74  en an expired st
32970 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78  atement.** is ex
32980 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c  ecuted using sql
32990 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77  ite3_step() it w
329a0 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d  ill either autom
329b0 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72  atically.** repr
329c0 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66  epare itself (if
329d0 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c   it was original
329e0 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ly created using
329f0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
32a00 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20  _v2()).** or it 
32a10 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53  will fail with S
32a20 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a  QLITE_SCHEMA..**
32a30 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
32a40 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
32a50 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
32a60 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
32a70 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
32a80 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
32a90 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
32aa0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
32ab0 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pired..*/.case O
32ac0 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
32ad0 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
32ae0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
32af0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
32b00 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
32b10 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
32b20 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
32b30 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
32b40 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
32b50 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
32b60 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
32b70 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
32b80 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
32b90 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
32ba0 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
32bb0 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
32bc0 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
32bd0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
32be0 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
32bf0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
32c00 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
32c10 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
32c20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
32c30 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
32c40 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
32c50 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
32c60 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
32c70 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
32c80 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
32c90 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
32ca0 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
32cb0 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
32cc0 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
32cd0 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
32ce0 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
32cf0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
32d00 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
32d10 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
32d20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
32d30 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
32d40 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
32d50 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
32d60 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
32d70 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
32d80 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
32d90 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
32da0 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
32db0 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
32dc0 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
32dd0 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
32de0 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
32df0 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
32e00 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
32e10 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
32e20 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
32e30 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
32e40 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
32e50 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29  btreeMask, p1) )
32e60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
32e70 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
32e80 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
32e90 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
32ea0 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
32eb0 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
32ec0 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
32ed0 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
32ee0 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
32ef0 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
32f00 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
32f10 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
32f20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
32f30 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73  rror(p, "databas
32f40 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
32f50 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  d: %s", z);.    
32f60 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
32f70 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32f80 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
32f90 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
32fa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
32fb0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
32fc0 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
32fd0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
32fe0 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
32ff0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
33000 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
33010 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
33020 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
33030 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
33040 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
33050 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
33060 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
33070 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
33080 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
33090 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
330a0 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
330b0 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
330c0 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
330d0 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
330e0 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
330f0 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
33100 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
33110 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a  in: {.  VTable *
33120 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d  pVTab;.  pVTab =
33130 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
33140 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
33150 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61  abBegin(db, pVTa
33160 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20  b);.  if( pVTab 
33170 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  ) sqlite3VtabImp
33180 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54  ortErrmsg(p, pVT
33190 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
331a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
331b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
331c0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
331d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
331e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
331f0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
33200 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
33210 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69  .** P2 is a regi
33220 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ster that holds 
33230 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
33240 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
33250 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20  atabase .** P1. 
33260 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
33270 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
33280 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
33290 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20  OP_VCreate: {.  
332a0 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
332b0 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
332c0 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
332d0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
332e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
332f0 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
33300 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
33310 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d  */..  memset(&sM
33320 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
33330 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20  em));.  sMem.db 
33340 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75  = db;.  /* Becau
33350 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20  se P2 is always 
33360 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c  a static string,
33370 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
33380 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  e for the.  ** s
33390 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
333a0 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20  y() to fail */. 
333b0 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
333c0 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
333d0 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20  MEM_Str)!=0 );. 
333e0 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
333f0 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
33400 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29  MEM_Static)!=0 )
33410 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
33420 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65  VdbeMemCopy(&sMe
33430 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  m, &aMem[pOp->p2
33440 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  ]);.  assert( rc
33450 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
33460 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63   zTab = (const c
33470 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
33480 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a  ue_text(&sMem);.
33490 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c    assert( zTab |
334a0 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
334b0 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62  ed );.  if( zTab
334c0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
334d0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
334e0 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
334f0 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  zTab, &p->zErrMs
33500 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  g);.  }.  sqlite
33510 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
33520 26 73 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  &sMem);.  break;
33530 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
33540 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33550 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
33560 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
33570 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
33580 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
33590 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
335a0 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
335b0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
335c0 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
335d0 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
335e0 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
335f0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
33600 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
33610 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65  oy: {.  db->nVDe
33620 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20  stroy++;.  rc = 
33630 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
33640 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
33650 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
33660 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d    db->nVDestroy-
33670 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  -;.  break;.}.#e
33680 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
33690 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
336a0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
336b0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
336c0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
336d0 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
336e0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
336f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
33700 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
33710 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
33720 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
33730 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
33740 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
33750 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
33760 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
33770 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
33780 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
33790 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
337a0 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
337b0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
337c0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
337d0 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
337e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
337f0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
33800 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
33810 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
33820 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
33830 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a   );.  pCur = 0;.
33840 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70    pVCur = 0;.  p
33850 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
33860 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
33870 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
33880 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
33890 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
338a0 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
338b0 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  D;.    break;.  
338c0 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  }.  pModule = pV
338d0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
338e0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
338f0 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75  pen(pVtab, &pVCu
33900 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
33910 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
33920 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
33930 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
33940 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
33950 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
33960 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
33970 20 2a 2f 0a 20 20 20 20 70 56 43 75 72 2d 3e 70   */.    pVCur->p
33980 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20  Vtab = pVtab;.. 
33990 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
339a0 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a   vdbe cursor obj
339b0 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20  ect */.    pCur 
339c0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
339d0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  (p, pOp->p1, 0, 
339e0 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42  -1, CURTYPE_VTAB
339f0 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20  );.    if( pCur 
33a00 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 75  ){.      pCur->u
33a10 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b  c.pVCur = pVCur;
33a20 0a 20 20 20 20 20 20 70 56 74 61 62 2d 3e 6e 52  .      pVtab->nR
33a30 65 66 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ef++;.    }else{
33a40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
33a50 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
33a60 29 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  );.      pModule
33a70 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b  ->xClose(pVCur);
33a80 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
33a90 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  em;.    }.  }.  
33aa0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
33ab0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
33ac0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
33ad0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
33ae0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
33af0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
33b00 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
33b10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
33b20 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e  plan=r[P3] zplan
33b30 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ='P4'.**.** P1 i
33b40 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
33b50 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
33b60 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
33b70 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
33b80 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
33b90 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
33ba0 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
33bb0 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
33bc0 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
33bd0 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
33be0 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
33bf0 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
33c00 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
33c10 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
33c20 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
33c30 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
33c40 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
33c50 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
33c60 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
33c70 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
33c80 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
33c90 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
33ca0 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
33cb0 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
33cc0 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
33cd0 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
33ce0 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
33cf0 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
33d00 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
33d10 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
33d20 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
33d30 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
33d40 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
33d50 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
33d60 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
33d70 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
33d80 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
33d90 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
33da0 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
33db0 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
33dc0 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
33dd0 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
33de0 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
33df0 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
33e00 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
33e10 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
33e20 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
33e30 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
33e40 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
33e50 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
33e60 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
33e70 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
33e80 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
33e90 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
33ea0 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
33eb0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
33ec0 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  pVCur;.  sqlite3
33ed0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
33ee0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
33ef0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
33f00 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  nt i;.  Mem **ap
33f10 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d  Arg;..  pQuery =
33f20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
33f30 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65  .  pArgc = &pQue
33f40 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20  ry[1];.  pCur = 
33f50 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
33f60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  ];.  assert( mem
33f70 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20  IsValid(pQuery) 
33f80 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
33f90 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75  ACE(pOp->p3, pQu
33fa0 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ery);.  assert( 
33fb0 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  pCur->eCurType==
33fc0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
33fd0 20 20 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e    pVCur = pCur->
33fe0 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61  uc.pVCur;.  pVta
33ff0 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62  b = pVCur->pVtab
34000 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
34010 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
34020 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
34030 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
34040 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
34050 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
34060 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
34070 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
34080 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
34090 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
340a0 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
340b0 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
340c0 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
340d0 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
340e0 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65  r method */.  re
340f0 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d  s = 0;.  apArg =
34100 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72   p->apArg;.  for
34110 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
34120 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b  i++){.    apArg[
34130 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
34140 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f  ;.  }.  rc = pMo
34150 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
34160 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  Cur, iQuery, pOp
34170 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
34180 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Arg);.  sqlite3V
34190 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
341a0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
341b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
341c0 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
341d0 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29  ule->xEof(pVCur)
341e0 3b 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  ;.  }.  pCur->nu
341f0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62  llRow = 0;.  Vdb
34200 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
34210 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
34220 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
34230 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
34240 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
34250 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
34260 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
34270 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
34280 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
34290 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
342a0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
342b0 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75  sis: r[P3]=vcolu
342c0 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  mn(P2).**.** Sto
342d0 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  re the value of 
342e0 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
342f0 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f   of.** the row o
34300 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  f the virtual-ta
34310 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a  ble that the .**
34320 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
34330 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72  inting to into r
34340 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
34350 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20  ase OP_VColumn: 
34360 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
34370 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
34380 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
34390 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
343a0 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65  *pDest;.  sqlite
343b0 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65  3_context sConte
343c0 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f  xt;..  VdbeCurso
343d0 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  r *pCur = p->apC
343e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
343f0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75  ssert( pCur->eCu
34400 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
34410 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
34420 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
34430 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
34440 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
34450 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
34460 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
34470 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
34480 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
34490 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
344a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
344b0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
344c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
344d0 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75   pVtab = pCur->u
344e0 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
344f0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
34500 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
34510 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
34520 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
34530 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
34540 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
34550 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70  ));.  sContext.p
34560 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d  Out = pDest;.  M
34570 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
34580 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
34590 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
345a0 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63  xColumn(pCur->uc
345b0 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78  .pVCur, &sContex
345c0 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73  t, pOp->p2);.  s
345d0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
345e0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
345f0 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74  ;.  if( sContext
34600 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
34610 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73  rc = sContext.is
34620 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  Error;.  }.  sql
34630 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
34640 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e  coding(pDest, en
34650 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53  coding);.  REGIS
34660 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
34670 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
34680 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
34690 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
346a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
346b0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
346c0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
346d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
346e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
346f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
34700 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
34710 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
34720 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
34730 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
34740 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
34750 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
34760 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
34770 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
34780 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
34790 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
347a0 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
347b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
347c0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
347d0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
347e0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
347f0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
34800 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
34810 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
34820 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
34830 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
34840 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
34850 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
34860 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
34870 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
34880 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
34890 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
348a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
348b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
348c0 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
348d0 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
348e0 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
348f0 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
34900 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
34910 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56  ur->uc.pVCur->pV
34920 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
34930 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
34940 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
34950 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
34960 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
34970 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
34980 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
34990 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
349a0 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
349b0 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
349c0 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
349d0 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
349e0 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
349f0 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
34a00 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
34a10 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
34a20 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
34a30 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
34a40 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
34a50 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
34a60 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
34a70 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
34a80 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
34a90 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
34aa0 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
34ab0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
34ac0 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20  rsor..  */.  rc 
34ad0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  = pModule->xNext
34ae0 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29  (pCur->uc.pVCur)
34af0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
34b00 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
34b10 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  Vtab);.  if( rc=
34b20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
34b30 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
34b40 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70  >xEof(pCur->uc.p
34b50 56 43 75 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62  VCur);.  }.  Vdb
34b60 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65  eBranchTaken(!re
34b70 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73  s,2);.  if( !res
34b80 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
34b90 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
34ba0 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67  p to P2 */.    g
34bb0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
34bc0 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
34bd0 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f  errupt;.  }.  go
34be0 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
34bf0 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
34c00 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
34c10 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
34c20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34c30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34c40 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
34c50 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
34c60 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
34c70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
34c80 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
34c90 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
34ca0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
34cb0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
34cc0 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
34cd0 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
34ce0 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
34cf0 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
34d00 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
34d10 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
34d20 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
34d30 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
34d40 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
34d50 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
34d60 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
34d70 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
34d80 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
34d90 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
34da0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34db0 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
34dc0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
34dd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
34de0 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
34df0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
34e00 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
34e10 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
34e20 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
34e30 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
34e40 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
34e50 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
34e60 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
34e70 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
34e80 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
34e90 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
34ea0 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
34eb0 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
34ec0 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
34ed0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
34ee0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
34ef0 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
34f00 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
34f10 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
34f20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
34f30 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
34f40 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
34f50 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
34f60 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
34f70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
34f80 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
34f90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34fa0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
34fb0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
34fc0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
34fd0 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
34fe0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
34ff0 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
35000 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
35010 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
35020 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
35030 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
35040 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
35050 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
35060 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
35070 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
35080 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
35090 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
350a0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
350b0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
350c0 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
350d0 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
350e0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
350f0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
35100 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
35110 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
35120 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
35130 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
35140 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
35150 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
35160 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
35170 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
35180 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
35190 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
351a0 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
351b0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
351c0 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
351d0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
351e0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
351f0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
35200 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
35210 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
35220 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
35230 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
35240 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
35250 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
35260 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
35270 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
35280 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
35290 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
352a0 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
352b0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
352c0 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
352d0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
352e0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
352f0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
35300 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
35310 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
35320 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
35330 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
35340 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
35350 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
35360 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
35370 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
35380 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
35390 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
353a0 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
353b0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
353c0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
353d0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
353e0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
353f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
35400 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
35410 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
35420 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68  ..**.** P5 is th
35430 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20  e error actions 
35440 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f  (OE_Replace, OE_
35450 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  Fail, OE_Ignore,
35460 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c   etc) to.** appl
35470 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66  y in the case of
35480 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61   a constraint fa
35490 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65  ilure on an inse
354a0 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f  rt or update..*/
354b0 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
354c0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
354d0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
354e0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
354f0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
35500 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
35510 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
35520 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
35530 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
35540 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
35550 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
35560 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
35570 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
35580 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
35590 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
355a0 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
355b0 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
355c0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
355d0 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
355e0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
355f0 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
35600 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
35610 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74  pVtab;.  if( pVt
35620 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70  ab==0 || NEVER(p
35630 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30  Vtab->pModule==0
35640 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
35650 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
35660 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d   break;.  }.  pM
35670 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
35680 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d  Module;.  nArg =
35690 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
356a0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
356b0 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  =P4_VTAB );.  if
356c0 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65  ( ALWAYS(pModule
356d0 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20  ->xUpdate) ){.  
356e0 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
356f0 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e  ict = db->vtabOn
35700 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70  Conflict;.    ap
35710 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
35720 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70      pX = &aMem[p
35730 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
35740 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
35750 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
35760 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29  ( memIsValid(pX)
35770 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
35780 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58  utToChange(p, pX
35790 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
357a0 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
357b0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  ++;.    }.    db
357c0 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
357d0 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20   = pOp->p5;.    
357e0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
357f0 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
35800 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
35810 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f  );.    db->vtabO
35820 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62  nConflict = vtab
35830 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
35840 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
35850 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
35860 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
35870 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d  QLITE_OK && pOp-
35880 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p1 ){.      ass
35890 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61  ert( nArg>1 && a
358a0 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72  pArg[0] && (apAr
358b0 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  g[0]->flags&MEM_
358c0 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64  Null) );.      d
358d0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
358e0 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
358f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
35900 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
35910 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20  E_CONSTRAINT && 
35920 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62  pOp->p4.pVtab->b
35930 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20  Constraint ){.  
35940 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d      if( pOp->p5=
35950 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
35960 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
35970 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
35980 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72  e{.        p->er
35990 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f  rorAction = ((pO
359a0 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
359b0 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20  e) ? OE_Abort : 
359c0 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20  pOp->p5);.      
359d0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
359e0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
359f0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
35a00 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35a10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35a20 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35a30 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
35a40 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
35a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
35a60 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
35a70 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
35a80 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
35a90 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
35aa0 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
35ab0 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
35ac0 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
35ad0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
35ae0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
35af0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
35b00 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
35b10 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
35b20 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d  treeLastPage(db-
35b30 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
35b40 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  t);.  break;.}.#
35b50 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
35b60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
35b70 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
35b80 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50  code: MaxPgcnt P
35b90 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
35ba0 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65  * Try to set the
35bb0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
35bc0 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65  unt for database
35bd0 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
35be0 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f   in P3..** Do no
35bf0 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75  t let the maximu
35c00 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c  m page count fal
35c10 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72  l below the curr
35c20 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61  ent page count a
35c30 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61  nd.** do not cha
35c40 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nge the maximum 
35c50 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
35c60 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a   if P3==0..**.**
35c70 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d   Store the maxim
35c80 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66  um page count af
35c90 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69  ter the change i
35ca0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
35cb0 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63  /.case OP_MaxPgc
35cc0 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
35cd0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e   /* out2 */.  un
35ce0 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61  signed int newMa
35cf0 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  x;.  Btree *pBt;
35d00 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
35d10 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
35d20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
35d30 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
35d40 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
35d50 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
35d60 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
35d70 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
35d80 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
35d90 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
35da0 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
35db0 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
35dc0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
35dd0 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
35de0 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
35df0 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
35e00 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
35e10 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
35e20 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
35e30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
35e40 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
35e50 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
35e60 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
35e70 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
35e80 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
35e90 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
35ea0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
35eb0 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
35ec0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
35ed0 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
35ee0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
35ef0 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
35f00 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
35f10 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
35f20 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
35f30 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
35f40 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
35f50 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
35f60 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
35f70 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
35f80 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
35f90 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
35fa0 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
35fb0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
35fc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
35fd0 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
35fe0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35ff0 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20  MIT_TRACE.  if( 
36000 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26  db->xTrace.   &&
36010 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a   !p->doingRerun.
36020 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
36030 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
36040 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
36050 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a  ))!=0.  ){.    z
36060 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78   = sqlite3VdbeEx
36070 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63  pandSql(p, zTrac
36080 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61  e);.    db->xTra
36090 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
360a0 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , z);.    sqlite
360b0 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a  3DbFree(db, z);.
360c0 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
360d0 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
360e0 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f  E.  zTrace = (pO
360f0 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
36100 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a  4.z : p->zSql);.
36110 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a    if( zTrace ){.
36120 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
36130 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
36140 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
36150 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  f( DbMaskTest(p-
36160 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d  >btreeMask, i)==
36170 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
36180 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
36190 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d  _control(db, db-
361a0 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53  >aDb[i].zName, S
361b0 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43  QLITE_FCNTL_TRAC
361c0 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  E, zTrace);.    
361d0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
361e0 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
361f0 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66  _TRACE */.#ifdef
36200 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
36210 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
36220 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
36230 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61  )!=0.   && (zTra
36240 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
36250 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
36260 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
36270 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
36280 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
36290 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
362a0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
362b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
362c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
362d0 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a  E_OMIT_TRACE */.
362e0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
362f0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
36300 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
36310 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
36320 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 2f  E_CURSOR_HINTS./
36330 2a 20 4f 70 63 6f 64 65 3a 20 43 75 72 73 6f 72  * Opcode: Cursor
36340 48 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  Hint P1 * * P4 *
36350 0a 2a 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61  .**.** Provide a
36360 20 68 69 6e 74 20 74 6f 20 63 75 72 73 6f 72 20   hint to cursor 
36370 50 31 20 74 68 61 74 20 69 74 20 6f 6e 6c 79 20  P1 that it only 
36380 6e 65 65 64 73 20 74 6f 20 72 65 74 75 72 6e 20  needs to return 
36390 72 6f 77 73 20 74 68 61 74 0a 2a 2a 20 73 61 74  rows that.** sat
363a0 69 73 66 79 20 74 68 65 20 45 78 70 72 20 69 6e  isfy the Expr in
363b0 20 50 34 2e 20 20 54 4b 5f 52 45 47 49 53 54 45   P4.  TK_REGISTE
363c0 52 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 50  R terms in the P
363d0 34 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66  4 expression ref
363e0 65 72 0a 2a 2a 20 74 6f 20 76 61 6c 75 65 73 20  er.** to values 
363f0 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 20 69  currently held i
36400 6e 20 72 65 67 69 73 74 65 72 73 2e 20 20 54 4b  n registers.  TK
36410 5f 43 4f 4c 55 4d 4e 20 74 65 72 6d 73 20 69 6e  _COLUMN terms in
36420 20 74 68 65 20 50 34 0a 2a 2a 20 65 78 70 72 65   the P4.** expre
36430 73 73 69 6f 6e 20 72 65 66 65 72 20 74 6f 20 63  ssion refer to c
36440 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 62 2d  olumns in the b-
36450 74 72 65 65 20 74 6f 20 77 68 69 63 68 20 63 75  tree to which cu
36460 72 73 6f 72 20 50 31 20 69 73 20 70 6f 69 6e 74  rsor P1 is point
36470 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ing..*/.case OP_
36480 43 75 72 73 6f 72 48 69 6e 74 3a 20 7b 0a 20 20  CursorHint: {.  
36490 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
364a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
364b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
364c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
364d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
364e0 74 79 70 65 3d 3d 50 34 5f 45 58 50 52 20 29 3b  type==P4_EXPR );
364f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
36500 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
36510 20 70 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72   pC ){.    asser
36520 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
36530 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
36540 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
36550 65 65 43 75 72 73 6f 72 48 69 6e 74 28 70 43 2d  eeCursorHint(pC-
36560 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
36570 45 45 5f 48 49 4e 54 5f 52 41 4e 47 45 2c 0a 20  EE_HINT_RANGE,. 
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70            pOp->p
365a0 34 2e 70 45 78 70 72 2c 20 61 4d 65 6d 29 3b 0a  4.pExpr, aMem);.
365b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
365c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
365d0 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
365e0 4e 54 53 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  NTS */../* Opcod
365f0 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
36600 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
36610 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
36620 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
36630 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
36640 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
36650 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
36660 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
36670 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
36680 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
36690 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
366a0 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
366b0 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
366c0 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
366d0 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
366e0 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
366f0 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
36700 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
36710 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
36720 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
36730 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
36740 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
36750 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
36760 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
36770 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
36780 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
36790 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
367a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
367b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f  ->opcode==OP_Noo
367c0 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  p || pOp->opcode
367d0 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a  ==OP_Explain );.
367e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
367f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36810 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
36840 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
36850 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
36860 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
36870 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
36880 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
36890 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
368a0 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
368b0 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
368c0 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
368d0 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
368e0 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
368f0 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
36900 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
36910 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
36920 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
36930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
36980 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
36990 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
369a0 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20    u64 endTime = 
369b0 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
369c0 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69  .      if( endTi
369d0 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 72 69 67  me>start ) pOrig
369e0 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e  Op->cycles += en
369f0 64 54 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20  dTime - start;. 
36a00 20 20 20 20 20 70 4f 72 69 67 4f 70 2d 3e 63 6e       pOrigOp->cn
36a10 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  t++;.    }.#endi
36a20 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
36a30 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
36a40 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
36a50 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
36a60 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
36a70 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
36a80 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
36a90 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
36aa0 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
36ab0 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
36ac0 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
36ad0 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
36ae0 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
36af0 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
36b00 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
36b10 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
36b20 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
36b30 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
36b40 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
36b50 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d     assert( pOp>=
36b60 26 61 4f 70 5b 2d 31 5d 20 26 26 20 70 4f 70 3c  &aOp[-1] && pOp<
36b70 26 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 20 29  &aOp[p->nOp-1] )
36b80 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
36b90 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
36ba0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
36bb0 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
36bc0 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29       if( rc!=0 )
36bd0 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e   printf("rc=%d\n
36be0 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
36bf0 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67   pOrigOp->opflag
36c00 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 29  s & (OPFLG_OUT2)
36c10 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
36c20 73 74 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f  sterTrace(pOrigO
36c30 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 72  p->p2, &aMem[pOr
36c40 69 67 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  igOp->p2]);.    
36c50 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f    }.      if( pO
36c60 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  rigOp->opflags &
36c70 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20   OPFLG_OUT3 ){. 
36c80 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
36c90 72 61 63 65 28 70 4f 72 69 67 4f 70 2d 3e 70 33  race(pOrigOp->p3
36ca0 2c 20 26 61 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d  , &aMem[pOrigOp-
36cb0 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
36cc0 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20     }.#endif  /* 
36cd0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
36ce0 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55  #endif  /* NDEBU
36cf0 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65  G */.  }  /* The
36d00 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28   end of the for(
36d10 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f  ;;) loop the loo
36d20 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64  ps through opcod
36d30 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77  es */..  /* If w
36d40 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
36d50 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  nt, it means tha
36d60 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66  t execution is f
36d70 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a  inished with.  *
36d80 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  * an error of so
36d90 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64  me kind..  */.vd
36da0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20  be_error_halt:. 
36db0 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
36dc0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74   p->rc = rc;.  t
36dd0 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
36de0 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
36df0 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  g!=0 );.  sqlite
36e00 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65  3_log(rc, "state
36e10 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25  ment aborts at %
36e20 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20  d: [%s] %s", .  
36e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e40 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
36e50 29 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  ), p->zSql, p->z
36e60 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
36e70 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
36e80 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
36e90 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62  IOERR_NOMEM ) db
36ea0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
36eb0 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
36ec0 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  E_ERROR;.  if( r
36ed0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
36ee0 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  t>0 ){.    sqlit
36ef0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
36f00 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61  (db, resetSchema
36f10 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a  OnFault-1);.  }.
36f20 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  .  /* This is th
36f30 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f  e only way out o
36f40 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
36f50 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20  .  We have to.  
36f60 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d  ** release the m
36f70 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73  utexes on btrees
36f80 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69   that were acqui
36f90 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20  red at the.  ** 
36fa0 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74  top. */.vdbe_ret
36fb0 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52  urn:.  db->lastR
36fc0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
36fd0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56  ;.  testcase( nV
36fe0 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e  mStep>0 );.  p->
36ff0 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
37000 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
37010 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53  EP] += (int)nVmS
37020 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  tep;.  sqlite3Vd
37030 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 61 73  beLeave(p);.  as
37040 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
37050 5f 4f 4b 20 7c 7c 20 6e 45 78 74 72 61 44 65 6c  _OK || nExtraDel
37060 65 74 65 3d 3d 30 20 0a 20 20 20 20 20 20 20 7c  ete==0 .       |
37070 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b  | sqlite3_strlik
37080 65 28 22 44 45 4c 45 54 45 25 22 2c 70 2d 3e 7a  e("DELETE%",p->z
37090 53 71 6c 2c 30 29 21 3d 30 20 0a 20 20 29 3b 0a  Sql,0)!=0 .  );.
370a0 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20    return rc;..  
370b0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
370c0 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  if a string or b
370d0 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20  lob larger than 
370e0 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
370f0 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e  H.  ** is encoun
37100 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f  tered..  */.too_
37110 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  big:.  sqlite3Vd
37120 62 65 45 72 72 6f 72 28 70 2c 20 22 73 74 72 69  beError(p, "stri
37130 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
37140 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
37150 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
37160 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
37170 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
37180 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
37190 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
371a0 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
371b0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
371c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72  .  sqlite3VdbeEr
371d0 72 6f 72 28 70 2c 20 22 6f 75 74 20 6f 66 20 6d  ror(p, "out of m
371e0 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
371f0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
37200 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
37210 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
37220 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
37230 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
37240 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
37250 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
37260 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
37270 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
37280 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
37290 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
372a0 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
372b0 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
372c0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
372d0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
372e0 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
372f0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
37300 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
37310 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
37320 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
37330 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
37340 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
37350 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
37360 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
37370 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
37380 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
37390 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
373a0 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
373b0 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
373c0 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
373d0 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
373e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
373f0 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
37400 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56  = rc;.  sqlite3V
37410 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
37420 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
37430 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
37440 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.