/ Hex Artifact Content
Login

Artifact a2725107658fd9572637e8e09d46dcfe851edb96:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
4770: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4780: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4790: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
47a0: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
47b0: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
47c0: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
47d0: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
47e0: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
47f0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4800: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4810: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4820: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4830: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4840: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4850: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4860: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4870: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4880: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
4890: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
48a0: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
48b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
48c0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
48d0: 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65  Limit = (unsigne
48e0: 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  d)p->aCounter[SQ
48f0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4900: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66  VM_STEP];.    if
4910: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4920: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4930: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4940: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4950: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4960: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4970: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
4980: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4990: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
49a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
49b0: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
49c0: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
49d0: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
49e0: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
49f0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4a00: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4a10: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4a20: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4a30: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4a40: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4a50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4a60: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4a70: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4a80: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4a90: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4aa0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4ab0: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4ac0: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4ad0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4ae0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4af0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4b00: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4b10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4b20: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4b30: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4b40: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4b50: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4b60: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4b70: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
4b80: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
4b90: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
4ba0: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
4bb0: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
4bc0: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
4bd0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
4be0: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
4bf0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
4c00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c10: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4c20: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c30: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4c40: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
4c50: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
4c60: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4c70: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4c80: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4c90: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4ca0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4cb0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4cc0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4cd0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4ce0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4cf0: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4d00: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
4d10: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4d20: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4d30: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4d40: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 23 69  p = &aOp[pc];.#i
4d50: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
4d60: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
4d70: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
4d80: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
4d90: 5b 70 63 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  [pc]++;.#endif..
4da0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4db0: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4dc0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4dd0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4de0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4df0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
4e00: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4e10: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
4e20: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e30: 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f  p(stdout, pc, pO
4e40: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
4e50: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4e60: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4e70: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4e80: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4e90: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4ea0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4eb0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
4ec0: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
4ed0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4ee0: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
4ef0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f00: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
4f10: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4f20: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
4f30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4f40: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
4f50: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
4f60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
4f70: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4f80: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
4f90: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
4fa0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
4fb0: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66  erelease" tag, f
4fc0: 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65  ree any.    ** e
4fd0: 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  xternal allocati
4fe0: 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70  ons out of mem[p
4ff0: 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70  2] and set mem[p
5000: 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20  2] to be.    ** 
5010: 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74  an undefined int
5020: 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77  eger.  Opcodes w
5030: 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20  ill either fill 
5040: 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
5050: 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63     ** value or c
5060: 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74  onvert mem[p2] t
5070: 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79  o a different ty
5080: 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  pe..    */.    a
5090: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
50a0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
50b0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
50c0: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
50d0: 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
50e0: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
50f0: 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
5100: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5110: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5120: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5130: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5140: 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  ) );.      pOut 
5150: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5160: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5170: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5180: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56 64 62  );.      if( Vdb
5190: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
51a0: 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ) ) sqlite3VdbeM
51b0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
51c0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
51d0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
51e0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69    }..    /* Sani
51f0: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5200: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5210: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5220: 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f  EBUG.    if( (pO
5230: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5240: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5250: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5260: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
5270: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
5280: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5290: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
52a0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
52b0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52c0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
52d0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
52e0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
52f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5300: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5310: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5320: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
5330: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5340: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5350: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5360: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5370: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5390: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
53a0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
53b0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
53c0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
53d0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2]) );.      ass
53e0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
53f0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5400: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
5410: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
5420: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5430: 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p2, &aMem[pOp->p
5440: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
5450: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5460: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5470: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5480: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5490: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
54a0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
54b0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
54c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
54d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
54e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
54f0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
5500: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
5510: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
5520: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p3]) );.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
5550: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p3]);.    }.  
5560: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5570: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  ags & OPFLG_OUT2
5580: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5590: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
55a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55b0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
55c0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
55d0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
55e0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
55f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5600: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5610: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5640: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5660: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5670: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5680: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
56a0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
56b0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56c0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5720: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5730: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5740: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5750: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5760: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5770: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5780: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5790: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
57a0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57b0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57c0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57d0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
57e0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
57f0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5800: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5810: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5820: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5830: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5840: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5850: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5860: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5870: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5880: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5890: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
58a0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58b0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58c0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58d0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
58e0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
58f0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5900: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5910: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5920: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5930: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5940: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5950: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5960: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5970: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5980: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5990: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
59a0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59b0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59c0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59d0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
59e0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
59f0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5a00: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a10: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a20: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a30: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a40: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a50: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a60: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a70: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5a80: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5a90: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5aa0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5ab0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ac0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ad0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5ae0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5af0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5b00: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b10: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b20: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b30: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b40: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b50: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b60: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b70: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5b80: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5b90: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5ba0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5bb0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5bc0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bd0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5be0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5bf0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5c00: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5c10: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5c20: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5c30: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5c40: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5c50: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5c60: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5c70: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5c80: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5c90: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5ca0: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5cb0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5cc0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5cd0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5ce0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5cf0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5d00: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5d10: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5d20: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5d30: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5d40: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5d50: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5d60: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5d70: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5d80: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5d90: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5da0: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5db0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5dc0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5dd0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5de0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
5e30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
5e40: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
5e50: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
5e60: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
5e70: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
5e80: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
5e90: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
5ea0: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
5eb0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
5ec0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
5ed0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
5ee0: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
5ef0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
5f00: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
5f10: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
5f20: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
5f30: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
5f40: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
5f50: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
5f60: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
5f70: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
5f80: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
5f90: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
5fa0: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
5fb0: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
5fc0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
5fd0: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
5fe0: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
5ff0: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6000: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6010: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6020: 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e   */.  pc = pOp->
6030: 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70  p2 - 1;..  /* Op
6040: 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75  codes that are u
6050: 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f  sed as the botto
6060: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f  m of a loop (OP_
6070: 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20  Next, OP_Prev,. 
6080: 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50   ** OP_VNext, OP
6090: 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20  _RowSetNext, or 
60a0: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
60b0: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
60c0: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
60d0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
60e0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
60f0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
6100: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
6110: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
6120: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
6130: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
6140: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
6150: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
6160: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
6170: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
6180: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
6190: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
61a0: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
61b0: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
61c0: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
61d0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
61e0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
61f0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
6200: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
6210: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
6220: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
6230: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
6240: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
6250: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
6260: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
6270: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6280: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6290: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
62a0: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
62b0: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
62c0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
62d0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
62e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
62f0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
6300: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
6310: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6320: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6330: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6340: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6350: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6360: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6370: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6380: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
6390: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
63a0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
63b0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
63c0: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
63d0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
63e0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
63f0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
6400: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
6410: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
6420: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
6430: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
6440: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
6450: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
6460: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
6470: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
6480: 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74  ress!=0 && nVmSt
6490: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
64a0: 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  it ){.    assert
64b0: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
64c0: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
64d0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56  ogressLimit = nV
64e0: 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f  mStep + db->nPro
64f0: 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53  gressOps - (nVmS
6500: 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73  tep%db->nProgres
6510: 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64  sOps);.    if( d
6520: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
6530: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29  >pProgressArg) )
6540: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
6550: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
6560: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
6570: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d  rror_halt;.    }
6580: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20  .  }.#endif.  . 
6590: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
65a0: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
65b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
65c0: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
65d0: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
65e0: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
65f0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6600: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6610: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6620: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6630: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6640: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
6650: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
6660: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
6670: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6680: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
6690: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
66a0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
66b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
66c0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
66d0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
66e0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
66f0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6700: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6710: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6720: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6740: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6750: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
6760: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6770: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
6780: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6790: 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20  r P1.  After.** 
67a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
67b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
67c0: 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  defined..*/.case
67d0: 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20   OP_Return: {   
67e0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
67f0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
6800: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6810: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6820: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  ==MEM_Int );.  p
6830: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
6840: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  .i;.  pIn1->flag
6850: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
6860: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
6870: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f  * Opcode: InitCo
6880: 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33  routine P1 P2 P3
6890: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75   * *.**.** Set u
68a0: 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f  p register P1 so
68b0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69   that it will Yi
68c0: 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75  eld to the corou
68d0: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
68e0: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
68f0: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
6900: 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  en the coroutine
6910: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6920: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6930: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6940: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6950: 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  r the coroutine 
6960: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
6970: 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e  o.** address P2.
6980: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6990: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f   EndCoroutine.*/
69a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72  .case OP_InitCor
69b0: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a  outine: {     /*
69c0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
69d0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
69e0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
69f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
6a00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6a10: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6a20: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6a30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6a40: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6a50: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6a60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6a70: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6a80: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6a90: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6aa0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
6ab0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6ac0: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
6ad0: 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  >p2 ) pc = pOp->
6ae0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6af0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6b00: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  EndCoroutine P1 
6b10: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
6b20: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
6b30: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6b40: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61  register P1 is a
6b50: 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20   Yield..** Jump 
6b60: 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  to the P2 parame
6b70: 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c  ter of that Yiel
6b80: 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  d..** After the 
6b90: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
6ba0: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
6bb0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ned..**.** See a
6bc0: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6bd0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  ne.*/.case OP_En
6be0: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
6bf0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6c00: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
6c10: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
6c20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c30: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c40: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c50: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6c60: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
6c70: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
6c80: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
6c90: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
6ca0: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
6cb0: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
6cc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6cd0: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
6ce0: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
6cf0: 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c   );.  pc = pCall
6d00: 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49  er->p2 - 1;.  pI
6d10: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6d20: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6d30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6d40: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
6d50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6d60: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
6d70: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6d80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6d90: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
6da0: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
6db0: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
6dc0: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
6dd0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
6de0: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
6df0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
6e00: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
6e10: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
6e20: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
6e30: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6e40: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
6e50: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
6e60: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
6e70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
6e80: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
6e90: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
6ea0: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
6eb0: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
6ec0: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
6ed0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
6ee0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6ef0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6f00: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
6f10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6f20: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
6f30: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6f40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6f50: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6f60: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6f70: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6f80: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6f90: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
6fa0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
6fb0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6fc0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6fd0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6fe0: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6ff0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7000: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7010: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7020: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
7030: 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a  r[P3]=null halt.
7040: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
7050: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
7060: 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20  r P3.  If it is 
7070: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
7080: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
7090: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
70a0: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
70b0: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
70c0: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
70d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
70e0: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
70f0: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
7100: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
7110: 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
7120: 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e  ter should be 1.
7130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
7140: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
7150: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
7160: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
7170: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
7180: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
7190: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
71a0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
71b0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
71c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
71d0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
71e0: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
71f0: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7200: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7210: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7220: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7230: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
7240: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
7250: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
7260: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
7270: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
7280: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
7290: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
72a0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
72b0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
72c0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
72d0: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
72e0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
72f0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7300: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7310: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7320: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7330: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
7340: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
7350: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
7360: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
7370: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
7380: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
7390: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
73a0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
73b0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
73c0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
73d0: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
73e0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
73f0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7400: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7410: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7420: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7430: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
7440: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
7450: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
7460: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
7470: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
7480: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
7490: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
74a0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
74b0: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
74c0: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
74d0: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
74e0: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
74f0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
7500: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7510: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
7520: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7530: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
7540: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
7550: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7560: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
7570: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
7580: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
7590: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
75a0: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
75b0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
75c0: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
75d0: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
75e0: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
75f0: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
7600: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
7610: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
7620: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
7630: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
7640: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
7650: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
7660: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
7670: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63  e OP_Halt: {.  c
7680: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
7690: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
76a0: 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20  zLogFmt;..  if( 
76b0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
76c0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
76d0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
76e0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
76f0: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7700: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
7710: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
7720: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
7730: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7740: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7750: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7760: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7770: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7780: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7790: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
77a0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
77b0: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
77c0: 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  .    lastRowid =
77d0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
77e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
77f0: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7800: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7810: 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f  on pc is the OP_
7820: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7830: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7840: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7850: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7860: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7870: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7880: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7890: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
78a0: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
78b0: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
78c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
78d0: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
78e0: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
78f0: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
7900: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
7910: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7920: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7930: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7940: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7950: 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d  */.      pc = p-
7960: 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20  >aOp[pc].p2-1;. 
7970: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7980: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7990: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62  = p->aMem;.    b
79a0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
79b0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
79c0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
79d0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
79e0: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
79f0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66   p->rc ){.    if
7a00: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
7a10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
7a20: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54  char * const azT
7a30: 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e  ype[] = { "NOT N
7a40: 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20  ULL", "UNIQUE", 
7a50: 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20  "CHECK",.       
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b        "FOREIGN K
7a90: 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73  EY" };.      ass
7aa0: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20  ert( pOp->p5>=1 
7ab0: 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b  && pOp->p5<=4 );
7ac0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7ad0: 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
7ae0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7af0: 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20  Op->p5==2 );.   
7b00: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7b10: 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20  ->p5==3 );.     
7b20: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7b30: 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a  p5==4 );.      z
7b40: 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f  Type = azType[pO
7b50: 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65  p->p5-1];.    }e
7b60: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65  lse{.      zType
7b70: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
7b80: 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30  assert( zType!=0
7b90: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30   || pOp->p4.z!=0
7ba0: 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20   );.    zLogFmt 
7bb0: 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  = "abort at %d i
7bc0: 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20  n [%s]: %s";.   
7bd0: 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f   if( zType && pO
7be0: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7bf0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7c00: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
7c10: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
7c20: 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a  t failed: %s", .
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f         zType, pO
7c50: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
7c60: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  lse if( pOp->p4.
7c70: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7c80: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
7c90: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
7ca0: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
7cb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7cc0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7cd0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7ce0: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7cf0: 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29   failed", zType)
7d00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7d10: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
7d20: 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d   zLogFmt, pc, p-
7d30: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
7d40: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
7d50: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
7d60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
7d70: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
7d80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7d90: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7da0: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7db0: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7dc0: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7dd0: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7de0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7df0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e00: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
7e10: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7e20: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7e30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e40: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7e50: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
7e60: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
7e70: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
7e80: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7e90: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7ea0: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7eb0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
7ec0: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
7ed0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
7ee0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
7ef0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7f00: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7f10: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
7f20: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7f30: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7f40: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
7f50: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7f60: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
7f70: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
7f80: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7f90: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
7fa0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7fb0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
7fc0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7fd0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
7fe0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
7ff0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8000: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8030: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8040: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8050: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
8060: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
8070: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
8080: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
8090: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
80a0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
80b0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
80c0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
80d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
80e0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
80f0: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
8100: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
8110: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8120: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8130: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8140: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
8150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
8160: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
8170: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8180: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  */.  pOut->flags
8190: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
81a0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
81b0: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
81c0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
81d0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
81e0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
81f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8200: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8210: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8220: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8230: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8240: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8250: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8260: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8270: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8280: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8290: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
82a0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
82b0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
82c0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
82d0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
82e0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
82f0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8300: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8310: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8320: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8330: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8340: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8350: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
8360: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
8370: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8380: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
8390: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
83a0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
83b0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
83c0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
83d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
83e0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
83f0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8400: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
8420: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8430: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8440: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8450: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
8460: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8470: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8480: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8490: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
84a0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
84b0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
84c0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
84d0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
84e0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
84f0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8500: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8510: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
8520: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
8530: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8540: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8550: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8560: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8570: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8580: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8590: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
85a0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
85b0: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
85c0: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
85d0: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
85e0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
85f0: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8600: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8610: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8620: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8630: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8640: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8650: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8660: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8670: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8680: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8690: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
86a0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
86b0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
86c0: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
86d0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
86e0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
86f0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8700: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8710: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
8720: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
8730: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8740: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
8750: 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ero, then.** the
8760: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8770: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8780: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8790: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
87a0: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
87b0: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
87c0: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
87d0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
87e0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
87f0: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8800: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8810: 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  AST..*/.case OP_
8820: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8830: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8840: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8850: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8860: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8870: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
8880: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8890: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
88a0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
88b0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
88c0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
88d0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
88e0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
88f0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
8900: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8910: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61  p->p3>0 );.    a
8920: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
8930: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8940: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8950: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8960: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8970: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8980: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8990: 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74  pIn3->u.i ) pOut
89a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
89b0: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
89c0: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72  M_Term;.  }.  br
89d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
89e0: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8a00: 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  :  r[P2..P3]=NUL
8a10: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
8a20: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8a30: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
8a40: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
8a50: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
8a60: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
8a70: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
8a80: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
8a90: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
8aa0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
8ab0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
8ac0: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
8ad0: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
8ae0: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
8af0: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
8b00: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
8b10: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
8b20: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
8b30: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
8b40: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
8b50: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
8b60: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
8b70: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
8b80: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
8b90: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
8ba0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
8bb0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
8bc0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8bd0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  se */.  int cnt;
8be0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
8bf0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
8c00: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
8c10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8c20: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
8c30: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
8c40: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
8c50: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
8c60: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
8c70: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77   : MEM_Null;.  w
8c80: 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20  hile( cnt>0 ){. 
8c90: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d     pOut++;.    m
8ca0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8cb0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
8cc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
8cd0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ull(pOut);.    p
8ce0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8cf0: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
8d00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8d10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
8d20: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
8d30: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8d40: 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  [P1]=NULL.**.** 
8d50: 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20  Set register P1 
8d60: 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  to have the valu
8d70: 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62  e NULL as seen b
8d80: 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  y the OP_MakeRec
8d90: 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ord.** instructi
8da0: 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66  on, but do not f
8db0: 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f  ree any string o
8dc0: 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73  r blob memory as
8dd0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
8de0: 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73   the register, s
8df0: 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61  o that if the va
8e00: 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67  lue was a string
8e10: 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61   or blob that wa
8e20: 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
8e30: 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f  copied using OP_
8e40: 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65  SCopy, the copie
8e50: 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  s will continue 
8e60: 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a  to be valid..*/.
8e70: 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c  case OP_SoftNull
8e80: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
8e90: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
8ea0: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
8eb0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8ec0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8ed0: 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p1];.  pOut->fla
8ee0: 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67  gs = (pOut->flag
8ef0: 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d  s|MEM_Null)&~MEM
8f00: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
8f10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8f20: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
8f30: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8f40: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
8f50: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
8f60: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8f70: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8f80: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8f90: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8fa0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8fb0: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
8fc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8fd0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8fe0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8ff0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
9000: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
9010: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9020: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9030: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
9040: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
9050: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9060: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9070: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9080: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
9090: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
90a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
90b0: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
90c0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
90d0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
90e0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
90f0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
9100: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
9110: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
9120: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
9130: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
9140: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
9150: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
9160: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
9170: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
9180: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
9190: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
91a0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
91b0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
91c0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
91d0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
91e0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
91f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9200: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
9210: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
9220: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
9230: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
9240: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
9250: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9260: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9270: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9280: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9290: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
92a0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
92b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
92c0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
92d0: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
92e0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
92f0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9300: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9310: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9320: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9330: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
9340: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
9350: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
9360: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
9370: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
9380: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
9390: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
93a0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
93b0: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
93c0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
93d0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
93e0: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
93f0: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9400: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9410: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9420: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9430: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
9440: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
9450: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
9460: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
9470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
9480: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
9490: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
94a0: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
94b0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
94c0: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
94d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
94e0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
94f0: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9500: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9510: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9520: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9530: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
9540: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
9550: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
9560: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
9570: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
9580: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
9590: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
95a0: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
95b0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
95c0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
95d0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
95e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
95f0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9600: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9610: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9620: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9630: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
9640: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
9650: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
9660: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9670: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
9680: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
9690: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
96a0: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
96b0: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
96c0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
96d0: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
96e0: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
96f0: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
9700: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
9710: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9720: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
9730: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
9740: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9750: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
9760: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9770: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
9780: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
9790: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
97a0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
97b0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
97c0: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
97d0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
97e0: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
97f0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9800: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
9810: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
9820: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
9830: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
9840: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
9850: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
9860: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
9870: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
9880: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9890: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
98a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
98b0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
98c0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
98d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
98e0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
98f0: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9900: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
9910: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
9920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9930: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
9940: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
9950: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
9960: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
9970: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
9980: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
9990: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
99a0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
99b0: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
99c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
99d0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
99e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
99f0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9a00: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
9a10: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9a20: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
9a30: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
9a40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9a50: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
9a60: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9a70: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
9a80: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
9a90: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9aa0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9ab0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9ac0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9ad0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9ae0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9af0: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9b00: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
9b10: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
9b20: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
9b30: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
9b40: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
9b50: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
9b60: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
9b70: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
9b80: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
9b90: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9ba0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9bb0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9bc0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9bd0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9be0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9bf0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9c00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9c10: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9c20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9c30: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9c40: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
9c50: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9c60: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9c70: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
9c80: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c90: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9ca0: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
9cb0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
9cc0: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
9cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9ce0: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
9cf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9d00: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
9d10: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
9d20: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
9d30: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
9d40: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
9d50: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
9d60: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
9d70: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
9d80: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
9d90: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
9da0: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
9db0: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
9dc0: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
9dd0: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
9de0: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
9df0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
9e00: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
9e10: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
9e20: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
9e30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
9e40: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
9e50: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
9e60: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
9e70: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
9e80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9e90: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
9ea0: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
9eb0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
9ec0: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
9ed0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9ee0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9ef0: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
9f00: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
9f10: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
9f20: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
9f30: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
9f40: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
9f50: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
9f60: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
9f70: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
9f80: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
9f90: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
9fa0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
9fb0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
9fc0: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
9fd0: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
9fe0: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
9ff0: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
a000: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
a010: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
a020: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
a030: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
a040: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
a050: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
a060: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
a070: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
a080: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
a090: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
a0a0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
a0b0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
a0c0: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
a0d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
a0e0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a0f0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
a100: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
a110: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
a120: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a130: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
a140: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
a150: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
a160: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
a170: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
a180: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
a190: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
a1a0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
a1b0: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
a1c0: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
a1d0: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
a1e0: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
a1f0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
a200: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
a210: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
a220: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
a230: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
a240: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
a250: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
a260: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
a270: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
a280: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
a290: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
a2a0: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
a2b0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a2c0: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
a2d0: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
a2e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
a2f0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
a300: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
a310: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
a320: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
a330: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
a340: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
a350: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
a360: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
a370: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
a380: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
a390: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
a3a0: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
a3b0: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
a3c0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a3d0: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
a3e0: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
a3f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
a400: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
a410: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
a420: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
a430: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
a440: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
a450: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
a460: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
a470: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
a480: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a490: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a4a0: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
a4b0: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
a4c0: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
a4d0: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
a4e0: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
a4f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
a500: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
a510: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
a520: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
a530: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
a540: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
a550: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
a560: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
a570: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
a580: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
a590: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
a5a0: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
a5b0: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
a5c0: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
a5d0: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
a5e0: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
a5f0: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
a600: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
a610: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
a620: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
a630: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
a640: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
a650: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
a660: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
a670: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
a680: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
a690: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
a6a0: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
a6b0: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
a6c0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
a6d0: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
a6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
a6f0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
a700: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
a710: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a720: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
a730: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a740: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
a750: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
a760: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
a770: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
a780: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
a790: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
a7a0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
a7b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a7c0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
a7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a7e0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
a7f0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
a800: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
a810: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
a820: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
a830: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
a840: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a850: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a860: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a870: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
a880: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
a890: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
a8a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
a8b0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
a8c0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
a8d0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
a8e0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a8f0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
a900: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
a910: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
a920: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
a930: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
a940: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
a950: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
a960: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
a970: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a980: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
a990: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
a9a0: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
a9b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a9c0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
a9d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
a9e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a9f0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
aa00: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
aa10: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
aa20: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
aa30: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
aa40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aa50: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
aa60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
aa70: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
aa80: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
aa90: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
aaa0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
aab0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
aac0: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
aad0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
aae0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
aaf0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
ab00: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
ab10: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
ab20: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
ab30: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
ab40: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
ab50: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
ab60: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
ab70: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
ab80: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
ab90: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
aba0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
abb0: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
abc0: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
abd0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
abe0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
abf0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
ac00: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
ac10: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
ac20: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
ac30: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
ac40: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
ac50: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
ac60: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
ac70: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
ac80: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
ac90: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
aca0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
acb0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
acc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
acd0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
ace0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
acf0: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
ad00: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
ad10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad20: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
ad30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
ad40: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
ad50: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ad60: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
ad70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ad80: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ad90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ada0: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
adb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
adc0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
add0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
ade0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
adf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ae00: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
ae10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ae20: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
ae30: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ae40: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ae50: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ae60: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ae70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ae80: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
ae90: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
aea0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
aeb0: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
aec0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
aed0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aee0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
aef0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
af00: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
af10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
af20: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
af30: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
af40: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
af50: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
af60: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
af70: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
af80: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
af90: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
afa0: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
afb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
afc0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
afd0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
afe0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
aff0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b000: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
b010: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
b020: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
b030: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
b040: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b050: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
b060: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
b070: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b080: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b090: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
b0a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b0b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b0c0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b0d0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b0e0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b0f0: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b100: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b110: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b120: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b130: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b140: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b150: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b160: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b170: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b180: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b190: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b1a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b1b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b1c0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b1d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b1e0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b1f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b200: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b210: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b220: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b230: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b240: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b250: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b260: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b270: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b280: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b290: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b2a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b2b0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b2c0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b2d0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b2f0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
b300: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b310: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
b320: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
b330: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
b340: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
b350: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
b360: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
b370: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
b380: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
b390: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
b3a0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
b3b0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b3c0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
b3d0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b3e0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b3f0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
b400: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b410: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b420: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b430: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
b440: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b450: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b460: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
b470: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
b480: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b490: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
b4a0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b4b0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b4c0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
b4d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b4e0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
b4f0: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
b500: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b510: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
b520: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b530: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
b540: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b550: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
b560: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b570: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
b580: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
b590: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b5a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b5b0: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
b5c0: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
b5d0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
b5e0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
b5f0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
b600: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
b610: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b620: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b630: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b640: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
b650: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
b660: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b670: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b680: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b690: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
b6a0: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
b6b0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
b6c0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b6d0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
b6e0: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
b6f0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b700: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b710: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b720: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
b730: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b740: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b750: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b760: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b770: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
b780: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
b790: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
b7a0: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
b7b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b7c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
b7d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b7e0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b7f0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b800: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b810: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b820: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
b830: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b840: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b850: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b860: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
b870: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b880: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
b890: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
b8a0: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
b8b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
b8c0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
b8d0: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
b8e0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b8f0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
b900: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b910: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b920: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
b930: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
b940: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b950: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
b960: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
b970: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b980: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
b990: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
b9a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b9b0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
b9c0: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
b9d0: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
b9e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b9f0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
ba00: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
ba10: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
ba20: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
ba30: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
ba40: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
ba50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ba60: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
ba70: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
ba80: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
ba90: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
baa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bab0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bac0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bad0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bae0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
baf0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
bb00: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
bb10: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
bb20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
bb30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
bb40: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bb50: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bb60: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
bb70: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bb80: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
bb90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
bba0: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
bbb0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bbc0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bbd0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
bbe0: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
bbf0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
bc00: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
bc10: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
bc20: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
bc30: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
bc40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc50: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
bc60: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
bc70: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
bc80: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
bc90: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
bca0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
bcb0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
bcc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
bcd0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
bce0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
bcf0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
bd00: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
bd10: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
bd20: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
bd30: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
bd40: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
bd50: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
bd60: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
bd70: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
bd80: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
bd90: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
bda0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
bdb0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
bdc0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
bdd0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
bde0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
bdf0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
be00: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
be10: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
be20: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
be30: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
be40: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
be50: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
be60: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
be70: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
be80: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
be90: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
bea0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
beb0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
bec0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
bed0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bee0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
bef0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
bf00: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
bf10: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
bf20: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
bf30: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
bf40: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
bf50: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
bf60: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
bf70: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
bf80: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
bf90: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
bfa0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
bfb0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
bfc0: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
bfd0: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
bfe0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
bff0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c000: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c010: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c020: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
c030: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
c040: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
c050: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
c060: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
c070: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
c080: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
c090: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
c0a0: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
c0b0: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
c0c0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
c0d0: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
c0e0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
c0f0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
c100: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
c110: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
c120: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
c130: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
c140: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
c150: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
c160: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
c170: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
c180: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
c190: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
c1a0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
c1b0: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
c1c0: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
c1d0: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
c1e0: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
c1f0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
c200: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
c210: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
c220: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
c230: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
c240: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
c250: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
c260: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c270: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
c280: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
c290: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
c2a0: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
c2b0: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
c2c0: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
c2d0: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
c2e0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
c2f0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
c300: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
c310: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
c320: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
c330: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
c340: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
c350: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
c360: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
c370: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
c380: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
c390: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
c3a0: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
c3b0: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
c3c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
c3d0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
c3e0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
c3f0: 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74  r) );.  ctx.pOut
c400: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
c410: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
c420: 68 61 6e 67 65 28 70 2c 20 63 74 78 2e 70 4f 75  hange(p, ctx.pOu
c430: 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e  t);..  assert( n
c440: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
c450: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
c460: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
c470: 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
c480: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
c490: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
c4a0: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
c4b0: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
c4c0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
c4d0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
c4e0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
c4f0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
c500: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
c510: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
c520: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
c530: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
c540: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
c550: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
c560: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c570: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
c580: 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  );.  ctx.pFunc =
c590: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
c5a0: 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a    ctx.iOp = pc;.
c5b0: 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b    ctx.pVdbe = p;
c5c0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
c5d0: 67 28 63 74 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f  g(ctx.pOut, MEM_
c5e0: 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 66 45 72  Null);.  ctx.fEr
c5f0: 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
c600: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
c610: 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63  lastRowid;.  (*c
c620: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
c630: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
c640: 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
c650: 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73  5-23230 */.  las
c660: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
c670: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65  tRowid;  /* Reme
c680: 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67  mber rowid chang
c690: 65 73 20 6d 61 64 65 20 62 79 20 78 46 75 6e 63  es made by xFunc
c6a0: 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
c6b0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
c6c0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
c6d0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
c6e0: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72  */.  if( ctx.fEr
c6f0: 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
c700: 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
c710: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c720: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
c730: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
c740: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
c750: 65 78 74 28 63 74 78 2e 70 4f 75 74 29 29 3b 0a  ext(ctx.pOut));.
c760: 20 20 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69        rc = ctx.i
c770: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
c780: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
c790: 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 63  eteAuxData(p, pc
c7a0: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a  , pOp->p1);.  }.
c7b0: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
c7c0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c7d0: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
c7e0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
c7f0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
c800: 6f 64 69 6e 67 28 63 74 78 2e 70 4f 75 74 2c 20  oding(ctx.pOut, 
c810: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
c820: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
c830: 6f 6f 42 69 67 28 63 74 78 2e 70 4f 75 74 29 20  ooBig(ctx.pOut) 
c840: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
c850: 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49  big;.  }..  REGI
c860: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
c870: 70 33 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a 20  p3, ctx.pOut);. 
c880: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
c890: 53 49 5a 45 28 63 74 78 2e 70 4f 75 74 29 3b 0a  SIZE(ctx.pOut);.
c8a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c8b0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
c8c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c8d0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
c8e0: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
c8f0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
c900: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
c910: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
c920: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
c930: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
c940: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c950: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c960: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c970: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c980: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c990: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
c9a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c9b0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
c9c0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
c9d0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
c9e0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
c9f0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ca00: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
ca10: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ca20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ca30: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ca40: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ca50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ca60: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
ca70: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
ca80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
ca90: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
caa0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
cab0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
cac0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
cad0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
cae0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
caf0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
cb00: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
cb10: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
cb20: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
cb30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
cb40: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
cb50: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
cb60: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
cb70: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
cb80: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
cb90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cba0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
cbb0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
cbc0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
cbd0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cbe0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
cbf0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
cc00: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
cc10: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
cc20: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
cc30: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
cc40: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cc50: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cc60: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cc70: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cc80: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cc90: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
cca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ccb0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
ccc0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ccd0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cd00: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
cd10: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cd20: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
cd30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd40: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
cd50: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cd60: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
cd70: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
cd80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
cd90: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cda0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
cdb0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
cdc0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
cdd0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cde0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
cdf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ce00: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
ce10: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
ce20: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
ce30: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
ce40: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
ce50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
ce60: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
ce70: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
ce80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
ce90: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
cea0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
ceb0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
cec0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
ced0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
cee0: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
cef0: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
cf00: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
cf10: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
cf20: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
cf30: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
cf40: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
cf50: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
cf60: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
cf70: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
cf80: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
cf90: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
cfa0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
cfb0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
cfc0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
cfd0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
cfe0: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
cff0: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
d000: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
d010: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
d020: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
d030: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
d040: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
d050: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
d060: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
d070: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
d080: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
d090: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
d0a0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
d0b0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
d0c0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
d0d0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
d0e0: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
d0f0: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
d100: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
d110: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
d120: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
d130: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
d140: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
d150: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
d160: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
d170: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
d180: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
d190: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
d1a0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
d1b0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
d1c0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
d1d0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
d1e0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
d1f0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
d200: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
d210: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
d220: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d230: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d240: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d250: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d260: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d270: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d280: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d290: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d2a0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d2b0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d2c0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d2d0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d2e0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d2f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d300: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d310: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d320: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d330: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d340: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d350: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d360: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d370: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d380: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d390: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d3a0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d3b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d3c0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
d3d0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
d3e0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
d3f0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
d400: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
d410: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
d420: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
d430: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
d440: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
d450: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
d460: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
d470: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
d480: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
d490: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
d4a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d4b0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
d4c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d4d0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
d4e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d4f0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
d500: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d510: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
d520: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
d530: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
d540: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
d550: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
d560: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
d570: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d580: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
d590: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
d5a0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
d5b0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
d5c0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
d5d0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
d5e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d5f0: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
d600: 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
d610: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d620: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
d630: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
d640: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d650: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
d660: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
d670: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
d680: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
d690: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d6a0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
d6b0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
d6c0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
d6d0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
d6e0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
d6f0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
d700: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
d710: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
d720: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
d730: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
d740: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
d750: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
d760: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
d770: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
d780: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
d790: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
d7a0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
d7b0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
d7c0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
d7d0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
d7e0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
d7f0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d800: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d810: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d820: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d830: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
d840: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d850: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d860: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
d870: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d880: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
d890: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
d8a0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d8b0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
d8c0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
d8d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d8e0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
d8f0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
d900: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
d910: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
d920: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
d930: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
d940: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
d950: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
d960: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
d970: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
d980: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
d990: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
d9a0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d9b0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d9c0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d9d0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d9e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
d9f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
da00: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
da10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
da20: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45  =SQLITE_AFF_NONE
da30: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
da40: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
da50: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
da60: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
da70: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
da80: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
da90: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a  ITE_AFF_NONE );.
daa0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
dab0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
dac0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
dad0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
dae0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
daf0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
db00: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
db10: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
db20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db30: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
db40: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
db50: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
db60: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
db70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
db80: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
db90: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
dba0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
dbb0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
dbc0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
dbd0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
dbe0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
dbf0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dc00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
dc10: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
dc20: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
dc30: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
dc40: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dc50: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
dc60: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
dc70: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
dc80: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
dc90: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
dca0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
dcb0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
dcc0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
dcd0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
dce0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
dcf0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
dd00: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
dd10: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
dd20: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
dd30: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
dd40: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
dd50: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
dd60: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
dd70: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
dd80: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
dd90: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
dda0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
ddb0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
ddc0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
ddd0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
dde0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
ddf0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
de00: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
de10: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
de20: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
de30: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
de40: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
de50: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
de60: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
de70: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
de80: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
de90: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
dea0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
deb0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
dec0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
ded0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
dee0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
def0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
df00: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
df10: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
df20: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
df30: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
df40: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
df50: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
df60: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
df70: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
df80: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
df90: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
dfa0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
dfb0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
dfc0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
dfd0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
dfe0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
dff0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e000: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e010: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e020: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e030: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e040: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e050: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e060: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e070: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e080: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e090: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e0a0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e0b0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e0c0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e0d0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e0e0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e0f0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e100: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e110: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e120: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e130: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e140: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e150: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e160: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
e170: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
e180: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
e190: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
e1a0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
e1b0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
e1c0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
e1d0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
e1e0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
e1f0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
e200: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e210: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
e220: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
e230: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
e240: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
e250: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
e260: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
e270: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
e280: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
e290: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
e2a0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
e2b0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e2c0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
e2d0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e2e0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e2f0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e300: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e310: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e320: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
e330: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
e340: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
e350: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
e360: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e370: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
e380: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e390: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e3a0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e3b0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e3c0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e3d0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e3e0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e3f0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e400: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e410: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e420: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e430: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e440: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
e450: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e460: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e470: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
e480: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e490: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e4a0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e4b0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e4c0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e4d0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e4e0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e4f0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
e500: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
e510: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e520: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
e530: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e540: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e550: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e560: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e570: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e580: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e590: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e5a0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
e5b0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
e5c0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e5d0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e5e0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e5f0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e600: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e610: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e620: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e630: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e640: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e650: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e660: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e670: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e680: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e690: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e6a0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e6b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e6c0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e6d0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e6e0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e6f0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e700: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e710: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e720: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e730: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e740: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e750: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e760: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e770: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e780: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
e790: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e7a0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e7b0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e7c0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e7d0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e7e0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e7f0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e800: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
e810: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
e820: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e830: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e840: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e850: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e860: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
e870: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
e880: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e890: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
e8a0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e8b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e8c0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e8d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e8e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e8f0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e900: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e910: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
e920: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e930: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e940: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e950: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e960: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e970: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
e980: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e990: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e9a0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
e9b0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e9c0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e9d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e9e0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e9f0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
ea00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ea10: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
ea20: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
ea30: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
ea40: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ea50: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ea60: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ea70: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ea80: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
ea90: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
eaa0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
eab0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
eac0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
ead0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
eae0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
eaf0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
eb00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
eb30: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
eb40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eb60: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
eb70: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
eb80: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
eb90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
eba0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
ebb0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ebc0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
ebd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ebe0: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
ebf0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
ec00: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
ec10: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
ec20: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
ec30: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
ec40: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
ec50: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
ec60: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
ec70: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
ec80: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
ec90: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
eca0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ecb0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
ecc0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
ecd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
ece0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
ecf0: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
ed00: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
ed10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
ed20: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
ed30: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
ed40: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
ed50: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
ed60: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
ed70: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
ed80: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
ed90: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
eda0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
edb0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
edc0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
edd0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
ede0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
edf0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
ee00: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
ee10: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
ee20: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
ee30: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
ee40: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
ee50: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
ee60: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
ee70: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
ee80: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
ee90: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
eea0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
eeb0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
eec0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
eed0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
eee0: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
eef0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
ef00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
ef10: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
ef20: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
ef30: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
ef40: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
ef50: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ef60: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
ef70: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
ef80: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
ef90: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
efa0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
efb0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
efc0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
efd0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
efe0: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
eff0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f000: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f010: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f020: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f030: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f040: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f050: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f060: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f070: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f080: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f090: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f0a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f0b0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f0c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
f0d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f0e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f0f0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
f100: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
f110: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f120: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
f130: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
f140: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
f150: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
f160: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f170: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
f180: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
f190: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f1a0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
f1b0: 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20  .          pc = 
f1c0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
f1d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
f1e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f1f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
f200: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
f210: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
f220: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
f230: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
f240: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
f250: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
f260: 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
f270: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
f280: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d        if( (pIn1-
f290: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
f2a0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
f2b0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
f2c0: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
f2d0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
f2e0: 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n1,0);.      }. 
f2f0: 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
f300: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
f310: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
f320: 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
f330: 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d          applyNum
f340: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
f350: 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  3,0);.      }.  
f360: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
f370: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
f380: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69  _TEXT ){.      i
f390: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f3a0: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
f3b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f3c0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
f3d0: 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
f3e0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f3f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
f400: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
f410: 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
f420: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
f430: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
f440: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
f450: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
f460: 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
f470: 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
f480: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  ags & MEM_Str)==
f490: 30 20 26 26 20 28 70 49 6e 33 2d 3e 66 6c 61 67  0 && (pIn3->flag
f4a0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
f4b0: 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
f4c0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f4d0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
f4e0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
f4f0: 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
f500: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
f510: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
f520: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
f530: 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64  gify(pIn3, encod
f540: 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  ing, 1);.      }
f550: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
f560: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
f570: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
f580: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
f590: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e  ;.    if( pIn1->
f5a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
f5b0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
f5c0: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
f5d0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20  ob(pIn1);.      
f5e0: 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a  flags1 &= ~MEM_Z
f5f0: 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
f600: 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  f( pIn3->flags &
f610: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
f620: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
f630: 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33  mExpandBlob(pIn3
f640: 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20  );.      flags3 
f650: 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  &= ~MEM_Zero;.  
f660: 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
f670: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
f680: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
f690: 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
f6a0: 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
f6b0: 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
f6c0: 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
f6d0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
f6e0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
f6f0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
f700: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
f710: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
f720: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
f730: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f740: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
f750: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
f760: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f770: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
f780: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
f790: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
f7a0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
f7b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f7c0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
f7d0: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
f7e0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
f7f0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
f800: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
f810: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
f820: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
f830: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
f840: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
f850: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
f860: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
f870: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
f880: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
f890: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
f8a0: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
f8b0: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
f8c0: 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e  n(res!=0, (pOp->
f8d0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
f8e0: 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66  EQ)?2:3);.    if
f8f0: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
f900: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
f910: 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20 55 6e     }.  }.  /* Un
f920: 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d  do any changes m
f930: 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69  ade by applyAffi
f940: 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e  nity() to the in
f950: 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a  put registers. *
f960: 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  /.  pIn1->flags 
f970: 3d 20 66 6c 61 67 73 31 3b 0a 20 20 70 49 6e 33  = flags1;.  pIn3
f980: 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33  ->flags = flags3
f990: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
f9a0: 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
f9b0: 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
f9c0: 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
f9d0: 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
f9e0: 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
f9f0: 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
fa00: 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
fa10: 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
fa20: 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
fa30: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
fa40: 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
fa50: 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68  xt OP_Compare th
fa60: 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50  at has.** the OP
fa70: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
fa80: 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69   set in P5. Typi
fa90: 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
faa0: 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
fab0: 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69  .** occur immedi
fac0: 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
fad0: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
fae0: 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
faf0: 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
fb00: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
fb10: 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
fb20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
fb30: 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
fb40: 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
fb50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
fb60: 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
fb70: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fb80: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40   Synopsis: r[P1@
fb90: 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d  P3] <-> r[P2@P3]
fba0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
fbb0: 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
fbc0: 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
fbd0: 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
fbe0: 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
fbf0: 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
fc00: 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
fc10: 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
fc20: 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
fc30: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
fc40: 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
fc50: 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
fc60: 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
fc70: 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
fc80: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
fc90: 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
fca0: 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69  order of compari
fcb0: 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d  son is.** determ
fcc0: 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  ined by the most
fcd0: 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75   recent OP_Permu
fce0: 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  tation operator.
fcf0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c    If the.** OPFL
fd00: 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69  AG_PERMUTE bit i
fd10: 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
fd20: 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61  gister are compa
fd30: 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61  red in sequentia
fd40: 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  l.** order..**.*
fd50: 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
fd60: 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
fd70: 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
fd80: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
fd90: 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
fda0: 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
fdb0: 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
fdc0: 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
fdd0: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
fde0: 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
fdf0: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
fe00: 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
fe10: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
fe20: 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
fe30: 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
fe40: 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
fe50: 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
fe60: 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
fe70: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
fe80: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
fe90: 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
fea0: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
feb0: 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
fec0: 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
fed0: 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
fee0: 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
fef0: 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
ff00: 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
ff10: 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
ff20: 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
ff30: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
ff40: 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
ff50: 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
ff60: 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
ff70: 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
ff80: 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
ff90: 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
ffa0: 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
ffb0: 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d  MUTE)==0 ) aPerm
ffc0: 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70  ute = 0;.  n = p
ffd0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
ffe0: 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
fff0: 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
10000 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
10010 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
10020 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10030 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
10040 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
10050 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
10060 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
10070 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
10080 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
10090 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
100a0 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
100b0 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
100c0 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
100d0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
100e0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
100f0 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
10100 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
10110 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10120 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10130 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
10140 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
10150 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
10160 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
10170 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
10180 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10190 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
101a0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
101b0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
101c0 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
101d0 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
101e0 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
101f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
10200 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
10210 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
10220 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
10230 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
10240 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10250 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
10260 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
10270 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
10280 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
10290 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
102a0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
102b0 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
102c0 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
102d0 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
102e0 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
102f0 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
10300 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
10310 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
10320 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
10330 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
10340 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
10350 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
10360 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
10370 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
10380 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
10390 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
103a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
103b0 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
103c0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
103d0 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
103e0 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
103f0 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
10400 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10410 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
10420 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
10430 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
10440 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
10450 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
10460 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
10470 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
10480 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
10490 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
104a0 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
104b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
104c0 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
104d0 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
104e0 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64  pOp->p1 - 1;  Vd
104f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
10500 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  3);.  }else if( 
10510 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
10520 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
10530 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
10540 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65  Taken(1,3);.  }e
10550 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
10560 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64 62 65  p->p3 - 1;  Vdbe
10570 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
10580 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10590 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
105a0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
105b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
105c0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
105d0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
105e0 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
105f0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
10600 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
10610 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
10620 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
10630 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
10640 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
10650 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
10660 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
10670 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
10680 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
10690 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
106a0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
106b0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
106c0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
106d0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
106e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
106f0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
10700 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
10710 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
10720 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
10730 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
10740 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
10750 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
10760 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
10770 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
10780 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
10790 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
107a0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
107b0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
107c0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
107d0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
107e0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
107f0 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
10800 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
10810 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
10820 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
10830 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10840 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
10850 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
10860 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
10870 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10880 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
10890 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
108a0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
108b0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
108c0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
108d0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
108e0 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
108f0 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
10900 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
10910 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
10920 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
10930 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10940 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10950 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10960 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
10970 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
10980 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
10990 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
109a0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
109b0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
109c0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
109d0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
109e0 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
109f0 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
10a00 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
10a10 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
10a20 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
10a30 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
10a40 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
10a50 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
10a60 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
10a70 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
10a80 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
10a90 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
10aa0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
10ab0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10ac0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
10ad0 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
10ae0 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
10af0 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
10b00 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
10b10 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
10b20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
10b30 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
10b40 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10b50 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
10b60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
10b70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
10b80 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10b90 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
10ba0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10bb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
10bc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
10bd0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
10be0 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
10bf0 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
10c00 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
10c10 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
10c20 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
10c30 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
10c40 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
10c50 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
10c60 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
10c70 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
10c80 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
10c90 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
10ca0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10cc0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
10cd0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
10ce0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
10cf0 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
10d00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10d20 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
10d30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
10d40 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
10d50 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
10d60 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
10d70 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
10d80 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10d90 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
10da0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10db0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
10dc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
10dd0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
10de0 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
10df0 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
10e00 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
10e10 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
10e20 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
10e30 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
10e40 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
10e50 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
10e60 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
10e70 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
10e80 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
10e90 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
10ea0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
10eb0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
10ec0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
10ed0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
10ee0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
10ef0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10f00 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
10f10 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
10f20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
10f30 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10f40 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
10f50 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
10f60 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
10f70 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
10f80 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
10f90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10fa0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
10fb0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
10fc0 20 43 68 65 63 6b 20 74 68 65 20 22 6f 6e 63 65   Check the "once
10fd0 22 20 66 6c 61 67 20 6e 75 6d 62 65 72 20 50 31  " flag number P1
10fe0 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 2c 20  . If it is set, 
10ff0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
11000 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65  ion P2. .** Othe
11010 72 77 69 73 65 2c 20 73 65 74 20 74 68 65 20 66  rwise, set the f
11020 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  lag and fall thr
11030 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
11040 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
11050 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
11060 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   this opcode cau
11070 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e  ses all followin
11080 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72  g opcodes up thr
11090 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62 75 74 20  ough P2.** (but 
110a0 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20 50 32  not including P2
110b0 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e  ) to run just on
110c0 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69  ce and to be ski
110d0 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  pped on subseque
110e0 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f  nt.** times thro
110f0 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a  ugh the loop..**
11100 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66  .** All "once" f
11110 6c 61 67 73 20 61 72 65 20 69 6e 69 74 69 61 6c  lags are initial
11120 6c 79 20 63 6c 65 61 72 65 64 20 77 68 65 6e 65  ly cleared whene
11130 76 65 72 20 61 20 70 72 65 70 61 72 65 64 20 73  ver a prepared s
11140 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73  tatement.** firs
11150 74 20 62 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e  t begins to run.
11160 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65  .*/.case OP_Once
11170 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11180 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
11190 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  ert( pOp->p1<p->
111a0 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20 56  nOnceFlag );.  V
111b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
111c0 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
111d0 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69  >p1]!=0, 2);.  i
111e0 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b  f( p->aOnceFlag[
111f0 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20  pOp->p1] ){.    
11200 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
11210 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
11220 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11230 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  1] = 1;.  }.  br
11240 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11250 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
11260 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
11270 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
11280 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11290 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
112a0 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
112b0 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
112c0 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e  is numeric and n
112d0 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  on-zero.  If the
112e0 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
112f0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
11300 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
11310 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
11320 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20  non-zero..*/./* 
11330 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31  Opcode: IfNot P1
11340 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
11350 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11360 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11370 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65  ster P1 is False
11380 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
11390 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61  is considered fa
113a0 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20  lse if it has a 
113b0 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66  numeric value of
113c0 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76   zero.  If the v
113d0 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
113e0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
113f0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
11400 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
11410 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  n-zero..*/.case 
11420 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20  OP_If:          
11430 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
11440 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in1 */.case OP_I
11450 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fNot: {         
11460 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
11470 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49  */.  int c;.  pI
11480 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
11490 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
114a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
114b0 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70  l ){.    c = pOp
114c0 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23  ->p3;.  }else{.#
114d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
114e0 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
114f0 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
11500 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
11510 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20  1)!=0;.#else.   
11520 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
11530 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
11540 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20  =0.0;.#endif.   
11550 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
11560 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d  ==OP_IfNot ) c =
11570 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42   !c;.  }.  VdbeB
11580 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c  ranchTaken(c!=0,
11590 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a   2);.  if( c ){.
115a0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
115b0 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
115c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
115d0 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
115e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
115f0 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67  if r[P1]==NULL g
11600 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
11610 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
11620 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11630 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
11640 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
11650 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
11660 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
11670 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
11680 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
11690 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
116a0 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
116b0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
116c0 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)!=0, 2);.  i
116d0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
116e0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
116f0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
11700 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
11710 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11720 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
11730 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
11740 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
11750 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
11760 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11770 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11780 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
11790 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
117a0 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
117b0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
117c0 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
117d0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
117e0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
117f0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
11800 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
11810 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11820 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
11830 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11840 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
11850 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
11860 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11870 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
11880 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
11890 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
118a0 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  :  r[P3]=PX.**.*
118b0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
118c0 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
118d0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
118e0 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
118f0 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
11900 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
11910 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
11920 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
11930 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
11940 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
11950 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
11960 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
11970 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
11980 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
11990 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
119a0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
119b0 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
119c0 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
119d0 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
119e0 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
119f0 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
11a00 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
11a10 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11a20 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
11a30 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
11a40 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
11a50 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
11a60 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
11a70 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
11a80 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
11a90 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
11aa0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
11ab0 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
11ac0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
11ad0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
11ae0 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
11af0 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
11b00 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
11b10 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
11b20 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
11b30 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
11b40 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
11b50 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
11b60 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
11b70 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
11b80 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
11b90 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
11ba0 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
11bb0 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
11bc0 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
11bd0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
11be0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
11bf0 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
11c00 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
11c10 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68  are set on P5 wh
11c20 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
11c30 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
11c40 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
11c50 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
11c60 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
11c70 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
11c80 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
11c90 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
11ca0 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
11cb0 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
11cc0 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
11cd0 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
11ce0 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
11cf0 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
11d00 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
11d10 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70  olumn: {.  i64 p
11d20 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a  ayloadSize64; /*
11d30 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11d40 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
11d50 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
11d60 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
11d70 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
11d80 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
11d90 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
11da0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
11db0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
11dc0 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
11dd0 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
11de0 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
11df0 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
11e00 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
11e10 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
11e20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
11e30 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
11e40 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74      /* The lengt
11e50 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  h of the seriali
11e60 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65  zed data for the
11e70 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
11e80 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
11e90 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
11ea0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
11eb0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
11ec0 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
11ed0 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
11ee0 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
11ef0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
11f00 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
11f10 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
11f20 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61  .  const u8 *zDa
11f30 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66  ta;   /* Part of
11f40 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
11f50 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
11f60 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20  onst u8 *zHdr;  
11f70 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73    /* Next unpars
11f80 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68  ed byte of the h
11f90 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74  eader */.  const
11fa0 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a   u8 *zEndHdr; /*
11fb0 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
11fc0 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
11fd0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
11fe0 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
11ff0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
12000 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  he data */.  u32
12010 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20   szField;       
12020 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
12030 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e  es in the conten
12040 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  t of a field */.
12050 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20    u32 avail;    
12060 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12070 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c  f bytes of avail
12080 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75  able data */.  u
12090 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
120a0 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
120b0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
120c0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 31 36   header */.  u16
120d0 20 66 78 3b 20 20 20 20 20 20 20 20 20 20 20 20   fx;            
120e0 2f 2a 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20  /* pDest->flags 
120f0 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  value */.  Mem *
12100 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
12110 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
12120 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
12130 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
12140 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12150 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
12160 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
12170 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
12180 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
12190 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
121a0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
121b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
121c0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
121d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
121e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
121f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
12200 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
12210 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
12220 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20  ld );.  aOffset 
12230 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23  = pC->aOffset;.#
12240 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12250 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
12260 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
12270 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20  tabCursor==0 ); 
12280 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76  /* OP_Column nev
12290 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72  er called on vir
122a0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65  tual table */.#e
122b0 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70  ndif.  pCrsr = p
122c0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
122d0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c  sert( pCrsr!=0 |
122e0 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  | pC->pseudoTabl
122f0 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72  eReg>0 ); /* pCr
12300 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64  sr NULL on Pseud
12310 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73  oTables */.  ass
12320 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c  ert( pCrsr!=0 ||
12330 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20   pC->nullRow ); 
12340 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e           /* pC->
12350 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64  nullRow on Pseud
12360 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a  oTables */..  /*
12370 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63   If the cursor c
12380 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62  ache is stale, b
12390 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61  ring it up-to-da
123a0 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  te */.  rc = sql
123b0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
123c0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
123d0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
123e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
123f0 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
12400 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus!=p->cacheCtr
12410 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   ){.    if( pC->
12420 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
12430 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b   if( pCrsr==0 ){
12440 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12450 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
12460 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  Reg>0 );.       
12470 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43   pReg = &aMem[pC
12480 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12490 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ];.        asser
124a0 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
124b0 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
124c0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
124d0 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
124e0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
124f0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73  loadSize = pC->s
12500 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70  zRow = avail = p
12510 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
12520 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
12530 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
12540 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
12550 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
12560 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
12570 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12580 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
12590 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
125a0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
125b0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
125c0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
125d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
125e0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
125f0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
12600 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
12610 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
12620 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
12630 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
12640 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  64);.        ass
12650 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12660 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65  OK ); /* True be
12670 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
12680 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
12690 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a  ve */.        /*
126a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
126b0 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
126c0 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
126d0 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
126e0 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64        ** payload
126f0 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20   size, so it is 
12700 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70  impossible for p
12710 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20  ayloadSize64 to 
12720 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61  be.        ** la
12730 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
12740 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  s. */.        as
12750 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
12760 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
12770 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
12780 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
12790 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
127a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
127b0 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
127c0 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43  ail);.        pC
127d0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
127e0 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
127f0 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  64;.      }else{
12800 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12810 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
12820 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
12830 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
12840 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
12850 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
12860 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79  (pCrsr, &pC->pay
12870 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20  loadSize);.     
12880 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
12890 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
128a0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
128b0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20  ot fail */.     
128c0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
128d0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
128e0 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
128f0 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
12900 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c    assert( avail<
12910 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
12920 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
12930 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
12940 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
12950 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
12960 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ail ){.        p
12970 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70  C->szRow = pC->p
12980 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
12990 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
129a0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
129b0 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  il;.      }.    
129c0 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
129d0 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
129e0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
129f0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
12a00 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f          goto too
12a10 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _big;.      }.  
12a20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68    }.    pC->cach
12a30 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
12a40 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69  heCtr;.    pC->i
12a50 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56  HdrOffset = getV
12a60 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77  arint32(pC->aRow
12a70 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70  , offset);.    p
12a80 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
12a90 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30  0;.    aOffset[0
12aa0 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20  ] = offset;..   
12ab0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20   /* Make sure a 
12ac0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
12ad0 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75   has not given u
12ae0 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65  s an oversize he
12af0 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20  ader..    ** Do 
12b00 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69  this now to avoi
12b10 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65  d an oversize me
12b20 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
12b30 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
12b40 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20  ype entries can 
12b50 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
12b60 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20   5 bytes each.  
12b70 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65  But 4 and 5 byte
12b80 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73  .    ** types us
12b90 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73  e so much data s
12ba0 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20  pace that there 
12bb0 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36  can only be 4096
12bc0 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a   and 32 of.    *
12bd0 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
12be0 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
12bf0 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
12c00 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
12c10 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65   a.    ** 3-byte
12c20 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
12c30 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
12c40 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
12c50 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a  lus three.    **
12c60 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72   extra bytes for
12c70 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67   the header leng
12c80 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36  th itself.  3276
12c90 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e  8*3 + 3 = 98307.
12ca0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
12cb0 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c  offset > 98307 |
12cc0 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70  | offset > pC->p
12cd0 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
12ce0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12cf0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12d00 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12d10 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  mn_error;.    }.
12d20 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f  .    if( avail<o
12d30 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f  ffset ){.      /
12d40 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
12d50 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
12d60 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
12d70 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
12d80 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
12d90 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
12da0 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
12db0 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
12dc0 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
12dd0 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
12de0 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
12df0 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
12e00 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
12e10 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
12e20 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
12e30 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
12e40 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
12e50 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
12e60 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20  ->szRow = 0;.   
12e70 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66   }..    /* The f
12e80 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73  ollowing goto is
12e90 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
12ea0 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69  .  It can be omi
12eb0 74 74 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20  tted and.    ** 
12ec0 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20  everything will 
12ed0 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74  still work.  But
12ee0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65   OP_Column is me
12ef0 61 73 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a  asurably faster.
12f00 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69      ** by skippi
12f10 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  ng the subsequen
12f20 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77  t conditional, w
12f30 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  hich is always t
12f40 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  rue..    */.    
12f50 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
12f60 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
12f70 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
12f80 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
12f90 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12fa0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a  mn_read_header;.
12fb0 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
12fc0 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
12fd0 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
12fe0 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
12ff0 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
13000 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
13010 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
13020 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
13030 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
13040 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
13050 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
13060 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
13070 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
13080 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
13090 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
130a0 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
130b0 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
130c0 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
130d0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
130e0 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
130f0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
13100 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
13110 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
13120 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
13130 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
13140 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
13150 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
13160 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
13170 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
13180 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
13190 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
131a0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
131b0 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
131c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
131d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
131e0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
131f0 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20   aOffset[0], .  
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c     !pC->isTable,
13230 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
13240 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
13250 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
13260 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13270 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
13280 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
13290 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
132a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
132b0 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
132c0 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
132d0 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
132e0 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
132f0 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
13300 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
13310 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
13320 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64       i = pC->nHd
13330 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f  rParsed;.      o
13340 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b  ffset = aOffset[
13350 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
13360 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
13370 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
13380 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
13390 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
133a0 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32     assert( i<=p2
133b0 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
133c0 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   );.      do{.  
133d0 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30        if( zHdr[0
133e0 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  ]<0x80 ){.      
133f0 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b      t = zHdr[0];
13400 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b  .          zHdr+
13410 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  +;.        }else
13420 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
13430 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61   += sqlite3GetVa
13440 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29  rint32(zHdr, &t)
13450 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13460 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d      pC->aType[i]
13470 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a   = t;.        sz
13480 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56  Field = sqlite3V
13490 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
134a0 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  (t);.        off
134b0 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a  set += szField;.
134c0 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73          if( offs
134d0 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f  et<szField ){  /
134e0 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74  * True if offset
134f0 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20   overflows */.  
13500 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26          zHdr = &
13510 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20  zEndHdr[1];  /* 
13520 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f  Forces SQLITE_CO
13530 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c  RRUPT return bel
13540 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
13550 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
13560 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  .        i++;.  
13570 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
13580 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
13590 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26   }while( i<=p2 &
135a0 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
135b0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72  ;.      pC->nHdr
135c0 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20  Parsed = i;.    
135d0 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
135e0 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20   = (u32)(zHdr - 
135f0 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66  zData);.      if
13600 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
13610 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13620 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
13630 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73  sMem);.        s
13640 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Mem.flags = MEM_
13650 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Null;.      }.  
13660 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
13670 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
13680 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
13690 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
136a0 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
136b0 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
136c0 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
136d0 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
136e0 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
136f0 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a    **          (z
13700 48 64 72 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20  Hdr>zEndHdr).   
13710 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e     ** (2) the en
13720 74 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20  tire header was 
13730 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c  used but not all
13740 20 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20   data was used. 
13750 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20       **         
13760 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20   (zHdr==zEndHdr 
13770 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70  && offset!=pC->p
13780 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
13790 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64    ** (3) the end
137a0 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74   of the data ext
137b0 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20  ends beyond the 
137c0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
137d0 64 2e 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  d..      **     
137e0 20 20 20 20 20 28 6f 66 66 73 65 74 20 3e 20 70       (offset > p
137f0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
13800 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
13810 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
13820 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
13830 64 72 20 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43  dr || offset!=pC
13840 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a  ->payloadSize)).
13850 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65         || (offse
13860 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  t > pC->payloadS
13870 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
13880 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
13890 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
138a0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
138b0 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
138c0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
138d0 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79   /* If after try
138e0 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e 65 77  ing to extra new
138f0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
13900 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61  e header, nHdrPa
13910 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73  rsed is.    ** s
13920 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70  till not up to p
13930 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  2, that means th
13940 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  at the record ha
13950 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a  s fewer than p2.
13960 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20      ** columns. 
13970 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77   So the result w
13980 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68  ill be either th
13990 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
139a0 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  or a NULL..    *
139b0 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48  /.    if( pC->nH
139c0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
139d0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
139e0 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b  4type==P4_MEM ){
139f0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13a00 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
13a10 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70  py(pDest, pOp->p
13a20 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74  4.pMem, MEM_Stat
13a30 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ic);.      }else
13a40 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
13a50 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
13a60 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a  pDest);.      }.
13a70 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
13a80 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
13a90 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63    }..  /* Extrac
13aa0 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f  t the content fo
13ab0 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f  r the p2+1-th co
13ac0 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63  lumn.  Control c
13ad0 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61  an only.  ** rea
13ae0 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66  ch this point if
13af0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f   aOffset[p2], aO
13b00 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64  ffset[p2+1], and
13b10 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61   pC->aType[p2] a
13b20 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69  re.  ** all vali
13b30 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  d..  */.  assert
13b40 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72  ( p2<pC->nHdrPar
13b50 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sed );.  assert(
13b60 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13b70 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
13b80 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
13b90 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29  nvariants(pDest)
13ba0 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
13bb0 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20  mDynamic(pDest) 
13bc0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
13bd0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
13be0 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b    t = pC->aType[
13bf0 70 32 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73  p2];.  if( pC->s
13c00 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32  zRow>=aOffset[p2
13c10 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  +1] ){.    /* Th
13c20 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e  is is the common
13c30 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
13c40 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20  desired content 
13c50 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67  fits on the orig
13c60 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65  inal.    ** page
13c70 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e   - where the con
13c80 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61  tent is not on a
13c90 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  n overflow page 
13ca0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
13cb0 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e  beSerialGet(pC->
13cc0 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d  aRow+aOffset[p2]
13cd0 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d  , t, pDest);.  }
13ce0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
13cf0 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
13d00 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65   only when conte
13d10 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f  nt is on overflo
13d20 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69  w pages */.    i
13d30 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
13d40 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
13d50 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
13d60 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
13d70 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
13d80 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
13d90 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
13da0 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
13db0 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
13dc0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13dd0 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
13de0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
13df0 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
13e00 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  nt for.      ** 
13e10 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66     1. the typeof
13e20 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20  () function,.   
13e30 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20     **    2. the 
13e40 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
13e50 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
13e60 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20  b, and.      ** 
13e70 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e     3. if the con
13e80 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a  tent length is z
13e90 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f  ero..      ** So
13ea0 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
13eb0 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74  l use bogus cont
13ec0 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ent rather than 
13ed0 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a  reading.      **
13ee0 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
13ef0 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77  sk.  NULL will w
13f00 6f 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75  ork for the valu
13f10 65 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20  e for strings.  
13f20 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73      ** and blobs
13f30 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73   and whatever is
13f40 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53   in the payloadS
13f50 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20  ize64 variable. 
13f60 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72       ** will wor
13f70 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67  k for everything
13f80 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20   else. */.      
13f90 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13fa0 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38  lGet(t<=13 ? (u8
13fb0 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  *)&payloadSize64
13fc0 20 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b   : 0, t, pDest);
13fd0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13fe0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13ff0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
14000 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
14010 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54  ], len, !pC->isT
14020 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b           pDest);
14050 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
14060 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14070 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14080 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
14090 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
140a0 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
140b0 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
140c0 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
140d0 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
140e0 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
140f0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74     }.  }.  pDest
14100 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
14110 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
14120 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f  :.  /* If the co
14130 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e  lumn value is an
14140 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
14150 67 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20  g, go ahead and 
14160 70 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61  persist.  ** tha
14170 74 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65  t string in case
14180 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65   the cursor move
14190 73 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c  s before the col
141a0 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a  umn value is.  *
141b0 2a 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c  * used.  The fol
141c0 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73  lowing code does
141d0 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
141e0 6f 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  of Deephemeraliz
141f0 65 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65  e().  ** but doe
14200 73 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a  s it faster. */.
14210 20 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c    if( (pDest->fl
14220 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
14230 21 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20  !=0 && pDest->z 
14240 29 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73  ){.    fx = pDes
14250 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
14260 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  Str|MEM_Blob);. 
14270 20 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30     assert( fx!=0
14280 20 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   );.    zData = 
14290 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
142a0 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70  ->z;.    len = p
142b0 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28  Dest->n;.    if(
142c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
142d0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44  learAndResize(pD
142e0 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f  est, len+2) ) go
142f0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d  to no_mem;.    m
14300 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20  emcpy(pDest->z, 
14310 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20  zData, len);.   
14320 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
14330 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a   0;.    pDest->z
14340 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  [len+1] = 0;.   
14350 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
14360 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  fx|MEM_Term;.  }
14370 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72  .op_column_error
14380 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
14390 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
143a0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
143b0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
143c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
143d0 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
143e0 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
143f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
14400 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
14410 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
14420 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
14430 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
14440 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
14450 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
14460 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
14470 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
14480 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
14490 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
144a0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
144b0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
144c0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
144d0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
144e0 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
144f0 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
14500 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
14510 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
14520 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
14530 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
14540 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
14550 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
14560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14570 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
14580 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
14590 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
145a0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
145b0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
145c0 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
145d0 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
145e0 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
145f0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
14600 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
14610 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
14620 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
14630 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
14640 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
14650 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
14660 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
14670 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
14680 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
14690 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
146a0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
146b0 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
146c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
146d0 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
146e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
146f0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
14700 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
14710 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
14720 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
14730 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
14740 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
14750 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
14760 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
14770 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
14780 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
14790 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
147a0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
147b0 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
147c0 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
147d0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
147e0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
147f0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
14800 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
14810 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
14820 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
14830 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
14840 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
14850 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
14860 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
14870 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
14880 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
14890 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
148a0 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
148b0 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
148c0 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
148d0 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
148e0 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
148f0 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
14900 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
14910 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
14920 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
14930 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
14940 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
14950 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
14960 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
14970 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
14980 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
14990 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
149a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
149b0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
149c0 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
149d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
149e0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
149f0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
14a00 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
14a10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14a20 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14a30 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
14a40 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
14a50 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
14a60 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
14a70 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
14a80 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
14a90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14aa0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14ab0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14ac0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14ad0 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
14ae0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14af0 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
14b00 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
14b10 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
14b20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
14b30 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
14b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
14b50 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
14b60 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
14b70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
14b80 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
14b90 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
14ba0 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
14bb0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
14bc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14bd0 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
14be0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
14bf0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
14c00 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
14c10 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
14c20 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
14c30 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
14c40 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
14c50 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
14c60 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
14c70 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
14c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14c90 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
14ca0 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72  wRecord[] header
14cb0 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14cd0 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
14ce0 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65  ewRecord[] conte
14cf0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  nt */.  int len;
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14d10 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
14d20 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
14d30 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
14d40 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
14d50 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
14d60 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
14d70 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
14d80 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14d90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14dc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
14dd0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
14de0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
14df0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
14e00 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
14e10 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
14e20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14e30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14e70 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14e80 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
14e90 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
14ea0 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
14eb0 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
14ec0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  and so forth..  
14ed0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
14ee0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
14ef0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
14f00 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
14f10 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
14f20 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
14f30 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
14f40 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14f50 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14f60 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14f70 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14f80 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
14f90 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
14fa0 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
14fb0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
14fc0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
14fd0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
14fe0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14ff0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
15000 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
15010 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15020 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
15030 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
15040 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
15050 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15060 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
15070 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
15080 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
15090 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
150a0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
150b0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
150c0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
150d0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
150e0 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  Field<=(p->nMem-
150f0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
15100 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
15110 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
15120 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
15130 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
15140 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
15150 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
15160 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
15170 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
15180 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
15190 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
151a0 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
151b0 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
151c0 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
151d0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
151e0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
151f0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
15200 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
15210 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
15220 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
15230 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
15240 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
15250 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
15260 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
15270 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
15280 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
15290 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b  lyAffinity(pRec+
152a0 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  +, *(zAffinity++
152b0 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
152c0 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66      assert( zAff
152d0 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70  inity[0]==0 || p
152e0 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  Rec<=pLast );.  
152f0 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
15300 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20  ity[0] );.  }.. 
15310 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
15320 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
15330 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
15340 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
15350 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
15360 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
15370 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
15380 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
15390 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74  /.  pRec = pLast
153a0 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
153b0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
153c0 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63  Rec) );.    pRec
153d0 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
153e0 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
153f0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
15400 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
15410 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69  ;.    len = sqli
15420 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15430 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  eLen(serial_type
15440 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
15450 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
15460 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  o ){.      if( n
15470 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20  Data ){.        
15480 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
15490 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a  pandBlob(pRec);.
154a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
154b0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
154c0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
154d0 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63       len -= pRec
154e0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
154f0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61   }.    }.    nDa
15500 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74  ta += len;.    t
15510 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
15520 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20  type==127 );.   
15530 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
15540 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20  l_type==128 );. 
15550 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61     nHdr += seria
15560 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20  l_type<=127 ? 1 
15570 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  : sqlite3VarintL
15580 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
15590 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52  .  }while( (--pR
155a0 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a  ec)>=pData0 );..
155b0 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
155c0 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20  : R-22564-11647 
155d0 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e  The header begin
155e0 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  s with a single 
155f0 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63  varint.  ** whic
15600 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  h determines the
15610 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
15620 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65   bytes in the he
15630 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74  ader. The varint
15640 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74  .  ** value is t
15650 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68  he size of the h
15660 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69  eader in bytes i
15670 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a  ncluding the siz
15680 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74  e varint.  ** it
15690 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63  self. */.  testc
156a0 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29  ase( nHdr==126 )
156b0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  ;.  testcase( nH
156c0 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28  dr==127 );.  if(
156d0 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20   nHdr<=126 ){.  
156e0 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20    /* The common 
156f0 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72  case */.    nHdr
15700 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   += 1;.  }else{.
15710 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65      /* Rare case
15720 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72   of a really lar
15730 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  ge header */.   
15740 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
15750 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
15760 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e  );.    nHdr += n
15770 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20  Varint;.    if( 
15780 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
15790 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
157a0 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
157b0 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
157c0 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  a;.  if( nByte>d
157d0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
157e0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
157f0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
15800 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
15810 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
15820 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
15830 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
15840 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
15850 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
15860 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
15870 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
15880 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
15890 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
158a0 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
158b0 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
158c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
158d0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
158e0 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
158f0 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64  ndResize() could
15900 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
15910 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
15920 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
15930 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
15940 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
15950 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29  Out, (int)nByte)
15960 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
15970 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52  mem;.  }.  zNewR
15980 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f  ecord = (u8 *)pO
15990 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69  ut->z;..  /* Wri
159a0 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  te the record */
159b0 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74  .  i = putVarint
159c0 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e  32(zNewRecord, n
159d0 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72  Hdr);.  j = nHdr
159e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  ;.  assert( pDat
159f0 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70  a0<=pLast );.  p
15a00 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15a10 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74  do{.    serial_t
15a20 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d  ype = pRec->uTem
15a30 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  p;.    /* EVIDEN
15a40 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34  CE-OF: R-06529-4
15a50 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74  7362 Following t
15a60 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61  he size varint a
15a70 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20  re one or more. 
15a80 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c     ** additional
15a90 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65   varints, one pe
15aa0 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20  r column. */.   
15ab0 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
15ac0 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
15ad0 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
15ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65             /* se
15af0 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20  rial type */.   
15b00 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
15b10 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54   R-64536-51728 T
15b20 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61  he values for ea
15b30 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
15b40 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69   record.    ** i
15b50 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
15b60 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  w the header. */
15b70 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65  .    j += sqlite
15b80 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
15b90 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70  zNewRecord[j], p
15ba0 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  Rec, serial_type
15bb0 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f  ); /* content */
15bc0 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52  .  }while( (++pR
15bd0 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ec)<=pLast );.  
15be0 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20  assert( i==nHdr 
15bf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d  );.  assert( j==
15c00 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
15c10 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
15c20 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
15c30 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
15c40 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
15c50 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
15c60 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
15c70 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20  ob;.  if( nZero 
15c80 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
15c90 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
15ca0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
15cb0 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
15cc0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
15cd0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
15ce0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
15cf0 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
15d00 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
15d10 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15d20 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
15d30 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15d40 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
15d50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15d60 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
15d70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
15d80 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a  r[P2]=count().**
15d90 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
15da0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15db0 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
15dc0 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
15dd0 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
15de0 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
15df0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
15e00 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
15e10 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
15e20 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
15e30 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
15e40 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
15e50 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
15e60 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
15e70 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  ;..  pCrsr = p->
15e80 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
15e90 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
15ea0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45  t( pCrsr );.  nE
15eb0 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  ntry = 0;  /* No
15ec0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
15ed0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
15ee0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
15ef0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15f00 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
15f10 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e  Entry);.  pOut->
15f20 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
15f30 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
15f40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
15f50 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
15f60 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
15f70 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
15f80 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
15f90 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
15fa0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
15fb0 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
15fc0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
15fd0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
15fe0 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
15ff0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
16000 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
16010 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
16020 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
16030 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
16040 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
16050 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
16060 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
16090 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
160a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
160c0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
160d0 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
160e0 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
160f0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
16100 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
16110 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
16120 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
16130 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
16140 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
16150 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
16160 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
16170 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
16180 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
16190 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
161a0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
161b0 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
161c0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
161d0 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
161e0 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
161f0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
16200 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
16210 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
16220 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
16230 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
16240 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
16250 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
16260 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
16270 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
16280 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
16290 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
162a0 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
162b0 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
162c0 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
162d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
162e0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
162f0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16300 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
16310 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16320 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
16330 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
16340 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
16350 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
16360 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
16370 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
16380 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
16390 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
163a0 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
163b0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
163c0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
163d0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
163e0 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
163f0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
16400 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
16410 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
16420 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
16430 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
16440 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
16450 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
16460 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
16470 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
16480 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
16490 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
164a0 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
164b0 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
164c0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
164d0 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
164e0 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
164f0 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
16500 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
16510 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
16520 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
16530 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
16540 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
16550 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
16560 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
16570 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
16580 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
16590 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
165a0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
165b0 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
165c0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
165d0 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
165e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
165f0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
16600 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
16640 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
16650 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16660 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16670 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16680 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
16690 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
166a0 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
166b0 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
166c0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
166d0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
166e0 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
166f0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
16700 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
16710 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
16720 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
16730 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
16740 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
16750 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
16760 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
16770 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
16780 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
16790 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
167a0 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
167b0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
167c0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
167d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
167e0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
167f0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
16800 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
16810 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
16820 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16830 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
16840 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16850 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
16860 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
16870 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
16880 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
16890 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
168a0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
168b0 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
168c0 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
168d0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
168e0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
168f0 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
16900 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
16910 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
16920 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
16930 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
16940 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
16950 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
16960 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  mCons;.      }. 
16970 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
16980 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
16990 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
169a0 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
169b0 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
169c0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
169d0 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
169e0 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
169f0 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
16a00 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
16a10 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
16a20 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
16a30 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
16a40 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
16a50 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
16a60 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
16a70 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
16a80 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
16a90 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
16aa0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
16ab0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
16ac0 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
16ad0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16ae0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16af0 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
16b00 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
16b10 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
16b20 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16b30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
16b40 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
16b50 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
16b60 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
16b70 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
16b80 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
16b90 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
16ba0 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
16bb0 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
16bc0 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
16bd0 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
16be0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
16bf0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16c00 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
16c10 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61     "cannot relea
16c20 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  se savepoint - S
16c30 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
16c40 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20   progress".     
16c50 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   );.      rc = S
16c60 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16c70 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
16c80 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
16c90 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
16ca0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
16cb0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
16cc0 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
16cd0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
16ce0 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
16cf0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
16d00 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
16d10 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
16d20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
16d30 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
16d40 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16d50 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
16d60 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16d70 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
16d80 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
16d90 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
16da0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
16db0 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
16dc0 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
16dd0 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
16de0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
16df0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16e00 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16e10 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16e20 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
16e30 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
16e40 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
16e50 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
16e60 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
16e70 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
16e80 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
16e90 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
16ea0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16eb0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16ec0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16ed0 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
16ee0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16ef0 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
16f00 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
16f10 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16f20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d       int isSchem
16f30 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20  aChange;.       
16f40 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   iSavepoint = db
16f50 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69  ->nSavepoint - i
16f60 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20  Savepoint - 1;. 
16f70 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
16f80 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
16f90 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  K ){.          i
16fa0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
16fb0 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
16fc0 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
16fd0 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  s)!=0;.         
16fe0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
16ff0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
17000 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
17010 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
17020 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
17030 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20  b[ii].pBt,.     
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52    SQLITE_ABORT_R
17070 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20  OLLBACK,.       
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d  isSchemaChange==
170b0 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
170c0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
170d0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
170e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
170f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17100 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
17110 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
17120 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
17130 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
17140 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
17150 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
17160 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17170 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
17180 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
17190 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
171a0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
171b0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
171c0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
171d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
171e0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
171f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
17200 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  ( isSchemaChange
17210 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
17220 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
17230 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
17240 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
17250 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
17260 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
17270 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  db);.          d
17280 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e  b->flags = (db->
17290 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49  flags | SQLITE_I
172a0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20  nternChanges);. 
172b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
172c0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
172d0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
172e0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
172f0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
17300 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
17310 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
17320 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
17330 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
17340 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
17350 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
17360 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
17370 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
17380 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
17390 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
173a0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
173b0 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
173c0 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
173d0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
173e0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
173f0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
17400 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
17410 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
17420 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
17430 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
17440 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
17450 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
17460 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
17470 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
17480 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
17490 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
174a0 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
174b0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
174c0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
174d0 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
174e0 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
174f0 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
17500 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
17510 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
17520 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17530 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
17540 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
17550 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
17560 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
17570 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
17580 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
17590 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
175a0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
175b0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
175c0 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
175d0 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
175e0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
175f0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
17600 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17610 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
17620 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
17630 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
17640 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
17650 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
17660 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
17670 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
17680 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
17690 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
176a0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
176b0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
176c0 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53  point(db, p1, iS
176d0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
176e0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
176f0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17700 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17710 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
17720 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  }..  break;.}../
17730 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
17740 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
17750 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
17760 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
17770 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
17780 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
17790 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
177a0 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
177b0 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
177c0 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
177d0 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
177e0 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
177f0 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
17800 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
17810 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
17820 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
17830 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
17840 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
17850 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
17860 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
17870 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
17880 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
17890 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
178a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
178b0 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
178c0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
178d0 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
178e0 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e  ck;.  int turnOn
178f0 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  AC;..  desiredAu
17900 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
17910 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
17920 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72  = pOp->p2;.  tur
17930 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41  nOnAC = desiredA
17940 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62  utoCommit && !db
17950 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  ->autoCommit;.  
17960 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
17970 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
17980 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17990 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
179a0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
179b0 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62  mit==1 || iRollb
179c0 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ack==0 );.  asse
179d0 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74  rt( db->nVdbeAct
179e0 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20  ive>0 );  /* At 
179f0 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56  least this one V
17a00 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20  M is active */. 
17a10 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
17a20 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a  eader );..#if 0.
17a30 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
17a40 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64  & iRollback && d
17a50 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31  b->nVdbeActive>1
17a60 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
17a70 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
17a80 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c  mplements a ROLL
17a90 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56  BACK and other V
17aa0 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74  Ms are.    ** st
17ab0 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64  ill running, and
17ac0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
17ad0 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e  s active, return
17ae0 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61   an error indica
17af0 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74  ting.    ** that
17b00 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
17b10 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
17b20 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
17b30 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
17b40 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
17b50 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  , "cannot rollba
17b60 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  ck transaction -
17b70 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
17b80 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
17b90 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
17ba0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17bb0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20    }else.#endif. 
17bc0 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
17bd0 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64   !iRollback && d
17be0 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17bf0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
17c00 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
17c10 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
17c20 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
17c30 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
17c40 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
17c50 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
17c60 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
17c70 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
17c80 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
17c90 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17ca0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17cb0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  db, "cannot comm
17cc0 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
17cd0 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
17ce0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
17cf0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
17d00 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17d10 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
17d20 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
17d30 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
17d40 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
17d50 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
17d60 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
17d70 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
17d80 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
17d90 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f  kAll(db, SQLITE_
17da0 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b  ABORT_ROLLBACK);
17db0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
17dc0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
17dd0 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
17de0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
17df0 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
17e00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
17e10 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17e20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17e30 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17e40 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
17e50 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66  Commit;.      if
17e60 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
17e70 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
17e80 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Y ){.        p->
17e90 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
17ea0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17eb0 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
17ec0 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
17ed0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17ee0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17ef0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
17f00 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
17f10 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
17f20 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
17f30 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
17f40 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
17f50 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
17f60 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
17f70 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
17f80 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
17f90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
17fa0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
17fb0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
17fc0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
17fd0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
17fe0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
17ff0 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20  rrMsg, db,.     
18000 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
18010 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
18020 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
18030 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
18040 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
18050 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
18060 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
18070 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
18080 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
180b0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
180c0 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
180d0 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
180e0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
180f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
18100 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73  /* Opcode: Trans
18110 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  action P1 P2 P3 
18120 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69  P4 P5.**.** Begi
18130 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
18140 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69  on database P1 i
18150 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
18160 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a  is not already.*
18170 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20  * active..** If 
18180 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
18190 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
181a0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
181b0 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a  ted, or if a .**
181c0 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
181d0 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74  n is already act
181e0 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61  ive, it is upgra
181f0 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74  ded to a write-t
18200 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49  ransaction..** I
18210 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
18220 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61  en a read-transa
18230 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
18240 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
18250 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
18260 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20  atabase file on 
18270 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61  which the transa
18280 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72  ction is.** star
18290 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73  ted.  Index 0 is
182a0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
182b0 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65  se file and inde
182c0 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69  x 1 is the.** fi
182d0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
182e0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49  orary tables.  I
182f0 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d  ndices of 2 or m
18300 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72  ore are used for
18310 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74  .** attached dat
18320 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  abases..**.** If
18330 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
18340 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20  tion is started 
18350 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65  and the Vdbe.use
18360 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61  sStmtJournal fla
18370 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68  g is.** true (th
18380 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  is flag is set i
18390 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d  f the Vdbe may m
183a0 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20  odify more than 
183b0 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a  one row and may.
183c0 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ** throw an ABOR
183d0 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20  T exception), a 
183e0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
183f0 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62  ction may also b
18400 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72  e opened..** Mor
18410 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20  e specifically, 
18420 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
18430 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65  saction is opene
18440 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61  d iff the databa
18450 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
18460 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f   is currently no
18470 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20  t in autocommit 
18480 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72  mode, or if ther
18490 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61  e are other.** a
184a0 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
184b0 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72  . A statement tr
184c0 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73  ansaction allows
184d0 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64   the changes mad
184e0 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42  e by this.** VDB
184f0 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  E to be rolled b
18500 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
18510 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
18520 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
18530 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
18540 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20  nsaction. If no 
18550 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
18560 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d  ered, the statem
18570 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
18580 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ** will automati
18590 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65  cally commit whe
185a0 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73  n the VDBE halts
185b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
185c0 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
185d0 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68  e also checks th
185e0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
185f0 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e  against P3.** an
18600 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  d the schema gen
18610 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
18620 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54  against P4..** T
18630 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  he cookie change
18640 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e  s its value when
18650 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
18660 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
18670 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  ..** This operat
18680 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64  ion is used to d
18690 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20  etect when that 
186a0 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  the cookie has c
186b0 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68  hanged.** and th
186c0 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  at the current p
186d0 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20  rocess needs to 
186e0 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  reread the schem
186f0 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  a.  If the schem
18700 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50  a.** cookie in P
18710 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  3 differs from t
18720 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
18730 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
18740 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66   header or.** if
18750 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
18760 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69  ration counter i
18770 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f  n P4 differs fro
18780 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a  m the current.**
18790 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
187a0 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c  ter, then an SQL
187b0 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72  ITE_SCHEMA error
187c0 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65   is raised and e
187d0 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74  xecution.** halt
187e0 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f  s.  The sqlite3_
187f0 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66  step() wrapper f
18800 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68  unction might th
18810 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65  en reprepare the
18820 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  .** statement an
18830 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20  d rerun it from 
18840 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a  the beginning..*
18850 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
18860 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
18870 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65   *pBt;.  int iMe
18880 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a  ta;.  int iGen;.
18890 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
188a0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
188b0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
188c0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d  ==0 || pOp->p2==
188d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
188e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
188f0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
18900 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
18910 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
18920 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
18930 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
18940 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
18950 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d  ITE_QueryOnly)!=
18960 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  0 ){.    rc = SQ
18970 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20  LITE_READONLY;. 
18980 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
18990 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
189a0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
189b0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20  pOp->p1].pBt;.. 
189c0 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
189d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
189e0 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c  eBeginTrans(pBt,
189f0 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69   pOp->p2);.    i
18a00 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
18a10 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
18a20 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d  c = pc;.      p-
18a30 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
18a40 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
18a50 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18a60 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
18a70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18a80 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
18a90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
18aa0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
18ab0 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
18ac0 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
18ad0 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
18ae0 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
18af0 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20  dbeRead>1) .    
18b00 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
18b10 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
18b20 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
18b30 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
18b40 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
18b50 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
18b60 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
18b70 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
18b80 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
18b90 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
18ba0 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
18bb0 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
18bc0 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
18bd0 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
18be0 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
18bf0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
18c00 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
18c10 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
18c20 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
18c30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18c40 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
18c50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
18c60 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
18c70 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
18c80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
18c90 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
18ca0 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
18cb0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
18cc0 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
18cd0 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
18ce0 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
18cf0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
18d00 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
18d10 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
18d20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
18d30 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
18d40 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
18d50 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
18d60 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
18d70 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
18d80 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d  edCons;.      p-
18d90 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73  >nStmtDefImmCons
18da0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
18db0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a  ImmCons;.    }..
18dc0 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68      /* Gather th
18dd0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
18de0 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63   number for chec
18df0 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50  king:.    ** IMP
18e00 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
18e10 52 2d 33 32 31 39 35 2d 31 39 34 36 35 20 54 68  R-32195-19465 Th
18e20 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
18e30 20 69 73 20 75 73 65 64 20 62 79 20 53 51 4c 69   is used by SQLi
18e40 74 65 0a 20 20 20 20 2a 2a 20 65 61 63 68 20 74  te.    ** each t
18e50 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65  ime a query is e
18e60 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72  xecuted to ensur
18e70 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72  e that the inter
18e80 6e 61 6c 20 63 61 63 68 65 20 6f 66 20 74 68 65  nal cache of the
18e90 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 75  .    ** schema u
18ea0 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69  sed when compili
18eb0 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79  ng the SQL query
18ec0 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68   matches the sch
18ed0 65 6d 61 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ema of the.    *
18ee0 2a 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  * database again
18ef0 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
18f00 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
18f10 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
18f20 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
18f30 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
18f40 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45  (pBt, BTREE_SCHE
18f50 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32  MA_VERSION, (u32
18f60 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20   *)&iMeta);.    
18f70 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70  iGen = db->aDb[p
18f80 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
18f90 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20  >iGeneration;.  
18fa0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20  }else{.    iGen 
18fb0 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d  = iMeta = 0;.  }
18fc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18fd0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  p5==0 || pOp->p4
18fe0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
18ff0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
19000 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  && (iMeta!=pOp->
19010 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p3 || iGen!=pOp-
19020 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71  >p4.i) ){.    sq
19030 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
19040 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
19050 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
19060 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
19070 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
19080 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
19090 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
190a0 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
190b0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
190c0 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
190d0 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
190e0 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
190f0 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
19100 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
19110 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
19120 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
19130 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
19140 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
19150 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
19160 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
19170 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
19180 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
19190 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
191a0 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
191b0 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
191c0 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
191d0 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
191e0 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
191f0 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
19200 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
19210 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
19220 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
19230 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
19240 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
19250 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
19260 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
19270 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
19280 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
19290 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
192a0 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
192b0 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
192c0 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
192d0 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
192e0 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
192f0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
19300 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
19310 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
19320 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
19330 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
19340 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
19350 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
19360 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
19370 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
19380 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
19390 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
193a0 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
193b0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
193c0 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
193d0 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  1);.    }.    p-
193e0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
193f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
19400 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61  HEMA;.  }.  brea
19410 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19420 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
19430 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
19440 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
19450 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
19460 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
19470 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
19480 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
19490 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
194a0 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
194b0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
194c0 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
194d0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
194e0 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
194f0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
19500 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
19510 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
19520 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
19530 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
19540 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
19550 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
19560 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
19570 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
19580 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
19590 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
195a0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
195b0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
195c0 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
195d0 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
195e0 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
195f0 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
19600 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
19610 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19630 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
19640 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
19650 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
19660 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73   iCookie;..  ass
19670 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
19680 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  r );.  iDb = pOp
19690 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
196a0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
196b0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
196c0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
196d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
196e0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
196f0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19700 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
19710 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
19720 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
19730 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
19740 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
19750 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
19760 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
19770 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
19780 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
19790 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
197a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
197b0 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
197c0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
197d0 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
197e0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
197f0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
19800 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
19810 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
19820 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
19830 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
19840 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
19850 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
19860 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
19870 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
19880 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
19890 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
198a0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
198b0 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
198c0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
198d0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
198e0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
198f0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
19900 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
19910 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
19920 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
19930 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
19940 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
19950 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
19960 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
19970 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
19980 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
19990 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
199a0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
199b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
199c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
199d0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
199e0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
199f0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19a00 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19a10 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
19a20 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
19a30 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
19a40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
19a50 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
19a60 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
19a70 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
19a80 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
19a90 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
19aa0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c  [pOp->p3];.  sql
19ab0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
19ac0 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f  erify(pIn3);.  /
19ad0 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
19ae0 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
19af0 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
19b00 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
19b10 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
19b20 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
19b30 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
19b40 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
19b50 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
19b60 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
19b70 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
19b80 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
19b90 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
19ba0 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
19bb0 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
19bc0 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
19bd0 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70  _cookie = (int)p
19be0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62  In3->u.i;.    db
19bf0 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
19c00 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b  E_InternChanges;
19c10 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
19c20 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45  ->p2==BTREE_FILE
19c30 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f  _FORMAT ){.    /
19c40 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73  * Record changes
19c50 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72   in the file for
19c60 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  mat */.    pDb->
19c70 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
19c80 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d  rmat = (u8)pIn3-
19c90 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20  >u.i;.  }.  if( 
19ca0 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
19cb0 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
19cc0 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
19cd0 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
19ce0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
19cf0 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
19d00 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
19d10 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
19d20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
19d30 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
19d40 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  s(db);.    p->ex
19d50 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
19d60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19d70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
19d80 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
19d90 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
19da0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
19db0 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
19dc0 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
19dd0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
19de0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
19df0 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
19e00 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
19e10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
19e20 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
19e30 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
19e40 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
19e50 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
19e60 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
19e70 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
19e80 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
19e90 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
19ea0 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
19eb0 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
19ec0 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
19ed0 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19ee0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
19ef0 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
19f00 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
19f10 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
19f20 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
19f30 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
19f40 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
19f50 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
19f60 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
19f70 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
19f80 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
19f90 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
19fa0 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
19fb0 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
19fc0 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
19fd0 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
19fe0 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
19ff0 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
1a000 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
1a010 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
1a020 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
1a030 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
1a040 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
1a050 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
1a060 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
1a070 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
1a080 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
1a090 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1a0a0 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
1a0b0 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
1a0c0 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
1a0d0 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
1a0e0 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
1a0f0 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
1a100 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
1a110 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1a120 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
1a130 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
1a140 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
1a150 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
1a160 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
1a170 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
1a180 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
1a190 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
1a1a0 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
1a1b0 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
1a1c0 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
1a1d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1a1e0 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1a1f0 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1a200 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1a210 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1a220 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1a230 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1a240 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1a250 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1a260 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1a270 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1a280 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1a290 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1a2a0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1a2b0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1a2c0 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1a2d0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1a2e0 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1a2f0 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1a300 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1a310 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1a320 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1a330 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1a340 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1a350 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1a360 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1a370 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1a380 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1a390 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1a3a0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
1a3b0 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
1a3c0 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
1a3d0 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
1a3e0 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
1a3f0 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
1a400 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
1a410 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
1a420 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
1a430 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1a440 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1a450 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1a460 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1a470 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1a480 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1a490 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1a4a0 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1a4b0 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1a4c0 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1a4d0 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
1a4e0 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
1a4f0 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1a500 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1a510 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1a520 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
1a530 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1a540 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1a550 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1a560 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
1a570 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
1a580 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
1a590 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1a5a0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1a5b0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
1a5c0 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1a5d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1a5e0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1a5f0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1a600 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1a610 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1a620 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1a630 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1a640 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1a650 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1a660 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1a670 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1a680 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1a690 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1a6a0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1a6b0 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1a6c0 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1a6d0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1a6e0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1a6f0 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1a700 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1a710 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1a720 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1a730 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1a740 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1a750 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1a760 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1a770 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1a780 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1a790 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1a7a0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1a7b0 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1a7c0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1a7d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1a7e0 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1a7f0 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1a800 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1a810 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1a820 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1a830 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1a840 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1a850 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1a860 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1a870 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1a880 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1a890 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1a8a0 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1a8b0 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1a8c0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1a8d0 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1a8e0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1a8f0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1a900 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1a910 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1a920 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1a930 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1a940 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1a950 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1a960 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73  ->p5==0 );.  ass
1a970 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1a980 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1a990 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
1a9a0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
1a9b0 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e  ( pCur && pCur->
1a9c0 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70  pgnoRoot==(u32)p
1a9d0 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73  Op->p2 ){.    as
1a9e0 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d  sert( pCur->iDb=
1a9f0 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20  =pOp->p3 );     
1aa00 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62   /* Guaranteed b
1aa10 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  y the code gener
1aa20 61 74 6f 72 20 2a 2f 0a 20 20 20 20 62 72 65 61  ator */.    brea
1aa30 6b 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74  k;.  }.  /* If t
1aa40 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74  he cursor is not
1aa50 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
1aa60 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20  or is open on a 
1aa70 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69  different.  ** i
1aa80 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20  ndex, then fall 
1aa90 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
1aaa0 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63  OpenRead to forc
1aab0 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 7d 0a  e a reopen */.}.
1aac0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1aad0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1aae0 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  ite: {.  int nFi
1aaf0 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  eld;.  KeyInfo *
1ab00 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
1ab10 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  p2;.  int iDb;. 
1ab20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
1ab30 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
1ab40 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
1ab50 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65  Db *pDb;..  asse
1ab60 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50  rt( (pOp->p5&(OP
1ab70 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f 50 46  FLAG_P2ISREG|OPF
1ab80 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70  LAG_BULKCSR))==p
1ab90 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73 65  Op->p5 );.  asse
1aba0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1abb0 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c  =OP_OpenWrite ||
1abc0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1abd0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1abe0 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
1abf0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1ac00 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70  OP_OpenRead || p
1ac10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1ac20 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20  eopenIdx.       
1ac30 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c     || p->readOnl
1ac40 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  y==0 );..  if( p
1ac50 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
1ac60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1ac70 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20  RT_ROLLBACK;.   
1ac80 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e   break;.  }..  n
1ac90 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
1aca0 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
1acb0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
1acc0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1acd0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1ace0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
1acf0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1ad00 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1ad10 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20  , iDb) );.  pDb 
1ad20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
1ad30 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
1ad40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
1ad50 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1ad60 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1ad70 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c  rite ){.    wrFl
1ad80 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65  ag = 1;.    asse
1ad90 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1ada0 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
1adb0 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
1adc0 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
1add0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d  file_format < p-
1ade0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1adf0 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  mat ){.      p->
1ae00 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1ae10 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d  at = pDb->pSchem
1ae20 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a  a->file_format;.
1ae30 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1ae40 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20     wrFlag = 0;. 
1ae50 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
1ae60 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45   & OPFLAG_P2ISRE
1ae70 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  G ){.    assert(
1ae80 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73   p2>0 );.    ass
1ae90 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65  ert( p2<=(p->nMe
1aea0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
1aeb0 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  .    pIn2 = &aMe
1aec0 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72  m[p2];.    asser
1aed0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
1aee0 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  n2) );.    asser
1aef0 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
1af00 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1af10 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1af20 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1af30 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69  n2);.    p2 = (i
1af40 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn2->u.i;.  
1af50 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75    /* The p2 valu
1af60 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66  e always comes f
1af70 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43  rom a prior OP_C
1af80 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64  reateTable opcod
1af90 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61  e and.    ** tha
1afa0 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  t opcode will al
1afb0 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20  ways set the p2 
1afc0 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f  value to 2 or mo
1afd0 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e  re or else fail.
1afe0 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65  .    ** If there
1aff0 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c   were a failure,
1b000 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
1b010 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
1b020 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a  ve halted.    **
1b030 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67   before reaching
1b040 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b050 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45  n. */.    if( NE
1b060 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20  VER(p2<2) ) {.  
1b070 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b080 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
1b090 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1b0a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1b0b0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70   }.  }.  if( pOp
1b0c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1b0d0 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
1b0e0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1b0f0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73  KeyInfo;.    ass
1b100 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1b110 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1b120 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1b130 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1b140 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
1b150 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65  Info->nField+pKe
1b160 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a  yInfo->nXField;.
1b170 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1b180 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1b190 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
1b1a0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
1b1b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b1c0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1b1d0 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a  t( nField>=0 );.
1b1e0 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65    testcase( nFie
1b1f0 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62  ld==0 );  /* Tab
1b200 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20  le with INTEGER 
1b210 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
1b220 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a  nothing else */.
1b230 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
1b240 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1b250 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
1b260 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d   1);.  if( pCur=
1b270 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b280 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1b290 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1b2a0 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1b2b0 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1b2c0 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   p2;.  rc = sqli
1b2d0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1b2e0 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
1b2f0 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70  KeyInfo, pCur->p
1b300 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
1b310 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1b320 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1b330 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d  OPFLAG_BULKCSR==
1b340 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29  BTREE_BULKLOAD )
1b350 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
1b360 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72  CursorHints(pCur
1b370 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d  ->pCursor, (pOp-
1b380 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c  >p5 & OPFLAG_BUL
1b390 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 65  KCSR));..  /* Se
1b3a0 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
1b3b0 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c  .isTable variabl
1b3c0 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73  e. Previous vers
1b3d0 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c  ions of.  ** SQL
1b3e0 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63  ite used to chec
1b3f0 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61  k if the root-pa
1b400 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61  ge flags were sa
1b410 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ne at this point
1b420 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74  .  ** and report
1b430 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
1b440 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72  tion if they wer
1b450 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20  e not, but this 
1b460 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73  check has.  ** s
1b470 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  ince moved into 
1b480 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e  the btree layer.
1b490 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69    */  .  pCur->i
1b4a0 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
1b4b0 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
1b4c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1b4d0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
1b4e0 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
1b4f0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b500 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1b510 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1b520 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61  rsor P1 to a tra
1b530 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a  nsient table..**
1b540 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   The cursor is a
1b550 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61  lways opened rea
1b560 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20  d/write even if 
1b570 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1b580 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e  abase is read-on
1b590 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72  ly.  The ephemer
1b5a0 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64  al.** table is d
1b5b0 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63  eleted automatic
1b5c0 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75  ally when the cu
1b5d0 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a  rsor is closed..
1b5e0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
1b5f0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1b600 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72  s in the ephemer
1b610 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
1b620 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
1b630 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
1b640 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
1b650 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
1b660 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
1b670 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
1b680 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
1b690 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
1b6a0 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
1b6b0 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
1b6c0 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
1b6d0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  index..**.** The
1b6e0 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61   P5 parameter ca
1b6f0 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74  n be a mask of t
1b700 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73  he BTREE_* flags
1b710 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62   defined.** in b
1b720 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66  tree.h.  These f
1b730 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70  lags control asp
1b740 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72  ects of the oper
1b750 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
1b760 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45  btree.  The BTRE
1b770 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61  E_OMIT_JOURNAL a
1b780 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20  nd BTREE_SINGLE 
1b790 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64  flags are.** add
1b7a0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1b7b0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1b7c0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
1b7d0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
1b7e0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1b7f0 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
1b800 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
1b810 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
1b820 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
1b830 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
1b840 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
1b850 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
1b860 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
1b870 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
1b880 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1b890 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
1b8a0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
1b8b0 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
1b8c0 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
1b8d0 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
1b8e0 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
1b8f0 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
1b900 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1b910 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1b920 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63  yInfo;..  static
1b930 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
1b940 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
1b950 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
1b960 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1b970 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
1b980 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1b990 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
1b9a0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1b9b0 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
1b9c0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1b9d0 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
1b9e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b9f0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1ba00 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1ba10 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1ba20 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1ba30 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1ba40 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1ba50 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1ba60 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1ba70 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68   1;.  pCx->isEph
1ba80 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63  emeral = 1;.  rc
1ba90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
1baa0 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
1bab0 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20   db, &pCx->pBt, 
1bac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bad0 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f           BTREE_O
1bae0 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54  MIT_JOURNAL | BT
1baf0 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70  REE_SINGLE | pOp
1bb00 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b  ->p5, vfsFlags);
1bb10 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1bb20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
1bb30 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1bb40 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
1bb50 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
1bb60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1bb70 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
1bb80 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
1bb90 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
1bba0 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
1bbb0 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
1bbc0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
1bbd0 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42  with the BTREE_B
1bbe0 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f  LOBKEY flag befo
1bbf0 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  re.    ** openin
1bc00 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
1bc10 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
1bc20 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
1bc30 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f   the.    ** auto
1bc40 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1bc50 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
1bc60 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f  t-page 1 (an BLO
1bc70 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  B_INTKEY table).
1bc80 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1bc90 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  (pKeyInfo = pOp-
1bca0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30  >p4.pKeyInfo)!=0
1bcb0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
1bcc0 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
1bcd0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1bce0 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
1bcf0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1bd00 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1bd10 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
1bd20 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c   BTREE_BLOBKEY |
1bd30 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20   pOp->p5); .    
1bd40 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1bd50 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
1bd60 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
1bd70 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
1bd80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1bd90 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1bda0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1bdb0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1bdc0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1bdd0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
1bde0 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  o = pKeyInfo;.  
1bdf0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1be00 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1be10 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
1be20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e   pKeyInfo, pCx->
1be30 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1be40 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  }.      pCx->isT
1be50 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  able = 0;.    }e
1be60 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
1be70 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1be80 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53  or(pCx->pBt, MAS
1be90 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20  TER_ROOT, 1, 0, 
1bea0 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
1beb0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1bec0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1bed0 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65  .  pCx->isOrdere
1bee0 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54  d = (pOp->p5!=BT
1bef0 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a  REE_UNORDERED);.
1bf00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1bf10 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65  pcode: SorterOpe
1bf20 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  n P1 P2 P3 P4 *.
1bf30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1bf40 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
1bf50 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78  OpenEphemeral ex
1bf60 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1bf70 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e  ns.** a transien
1bf80 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20  t index that is 
1bf90 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73  specifically des
1bfa0 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61  igned to sort la
1bfb0 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73  rge.** tables us
1bfc0 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20  ing an external 
1bfd0 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72  merge-sort algor
1bfe0 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ithm..**.** If a
1bff0 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f  rgument P3 is no
1c000 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  n-zero, then it 
1c010 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74  indicates that t
1c020 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a  he sorter may.**
1c030 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73   assume that a s
1c040 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69  table sort consi
1c050 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74  dering the first
1c060 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61   P3 fields of ea
1c070 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66  ch.** key is suf
1c080 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75  ficient to produ
1c090 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20  ce the required 
1c0a0 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65  results..*/.case
1c0b0 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20   OP_SorterOpen: 
1c0c0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1c0d0 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1c0e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1c0f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1c100 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1c110 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1c120 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1c130 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1c140 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1c150 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65  _mem;.  pCx->pKe
1c160 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1c170 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
1c180 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1c190 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61  o->db==db );.  a
1c1a0 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1c1b0 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1c1c0 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  b) );.  rc = sql
1c1d0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e  ite3VdbeSorterIn
1c1e0 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20  it(db, pOp->p3, 
1c1f0 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pCx);.  break;.}
1c200 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1c210 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20  uenceTest P1 P2 
1c220 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1c230 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31  s: if( cursor[P1
1c240 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50  ].ctr++ ) pc = P
1c250 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
1c260 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49  sorter cursor. I
1c270 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63  f the sequence c
1c280 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
1c290 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a  tly zero, jump.*
1c2a0 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c  * to P2. Regardl
1c2b0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
1c2c0 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  r not the jump i
1c2d0 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65  s taken, increme
1c2e0 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65  nt the.** the se
1c2f0 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f  quence value..*/
1c300 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
1c310 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43  eTest: {.  VdbeC
1c320 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
1c330 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1c340 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1c350 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1c360 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1c370 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
1c380 3e 70 53 6f 72 74 65 72 20 29 3b 0a 20 20 69 66  >pSorter );.  if
1c390 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b  ( (pC->seqCount+
1c3a0 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  +)==0 ){.    pc 
1c3b0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1c3c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1c3d0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
1c3e0 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
1c3f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50  *.** Synopsis: P
1c400 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50  3 columns in r[P
1c410 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  2].**.** Open a 
1c420 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
1c430 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
1c440 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1c450 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
1c460 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
1c470 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1c480 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68  at one row is th
1c490 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
1c4a0 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
1c4b0 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  P2.  In other wo
1c4c0 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1c4d0 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1c4e0 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1c4f0 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1c500 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1c510 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  er P2..**.** A p
1c520 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
1c530 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
1c540 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
1c550 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ld a single.** r
1c560 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
1c570 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
1c580 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
1c590 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
1c5a0 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
1c5b0 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
1c5c0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1c5d0 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
1c5e0 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
1c5f0 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
1c600 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
1c610 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
1c620 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
1c630 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1c640 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
1c650 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
1c660 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
1c670 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
1c680 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1c690 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
1c6a0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1c6b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c6c0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1c6d0 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20   pOp->p3>=0 );. 
1c6e0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1c6f0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1c700 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30  , pOp->p3, -1, 0
1c710 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1c720 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1c730 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1c740 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f  1;.  pCx->pseudo
1c750 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e  TableReg = pOp->
1c760 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
1c770 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74  le = 1;.  assert
1c780 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
1c790 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c7a0 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
1c7b0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
1c7c0 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
1c7d0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
1c7e0 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
1c7f0 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
1c800 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
1c810 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
1c820 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
1c830 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74  lose: {.  assert
1c840 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1c850 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1c860 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  or );.  sqlite3V
1c870 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1c880 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c890 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  1]);.  p->apCsr[
1c8a0 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20  pOp->p1] = 0;.  
1c8b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1c8c0 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50  ode: SeekGE P1 P
1c8d0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1c8e0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1c8f0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1c900 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1c910 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1c920 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1c930 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1c940 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1c950 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1c960 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
1c970 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1c980 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1c990 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1c9a0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1c9b0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1c9c0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1c9d0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1c9e0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1c9f0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1ca00 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1ca10 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1ca20 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1ca30 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1ca40 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1ca50 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1ca60 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1ca70 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1ca80 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
1ca90 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1caa0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1cab0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1cac0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1cad0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1cae0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1caf0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1cb00 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
1cb10 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1cb20 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
1cb30 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
1cb40 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1cb50 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1cb60 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1cb70 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
1cb80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1cb90 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1cba0 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
1cbb0 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1cbc0 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31  pcode: SeekGT P1
1cbd0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1cbe0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1cbf0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1cc00 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1cc10 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1cc20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1cc30 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1cc40 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1cc50 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1cc60 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1cc70 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1cc80 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1cc90 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1cca0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1ccb0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1ccc0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1ccd0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1cce0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1ccf0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1cd00 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1cd10 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1cd20 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1cd30 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1cd40 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1cd50 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1cd60 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1cd70 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
1cd80 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1cd90 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1cda0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1cdb0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1cdc0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1cdd0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1cde0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1cdf0 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1ce00 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1ce10 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1ce20 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1ce30 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1ce40 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1ce50 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1ce60 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1ce70 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1ce80 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1ce90 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1cea0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1ceb0 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  ekLT P1 P2 P3 P4
1cec0 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1ced0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1cee0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1cef0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1cf00 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1cf10 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1cf20 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1cf30 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1cf40 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1cf50 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1cf60 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1cf70 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1cf80 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1cf90 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1cfa0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1cfb0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1cfc0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1cfd0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1cfe0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1cff0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1d000 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1d010 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1d020 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1d030 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1d040 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1d050 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1d060 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1d070 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1d080 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1d090 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1d0a0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1d0b0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1d0c0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1d0d0 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
1d0e0 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
1d0f0 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
1d100 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
1d110 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1d120 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1d130 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
1d140 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
1d150 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1d160 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1d170 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1d180 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1d190 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50  eekLE P1 P2 P3 P
1d1a0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1d1b0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1d1c0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1d1d0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1d1e0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1d1f0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1d200 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1d210 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1d220 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1d230 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1d240 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1d250 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1d260 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1d270 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1d280 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1d290 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1d2a0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1d2b0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1d2c0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1d2d0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1d2e0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1d2f0 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1d300 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1d310 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1d320 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1d330 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1d340 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1d350 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1d360 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1d370 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1d380 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1d390 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1d3a0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1d3b0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1d3c0 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1d3d0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1d3e0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1d3f0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1d400 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1d410 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1d420 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1d430 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1d440 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1d450 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1d460 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1d470 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1d480 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20  OP_SeekLT:      
1d490 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1d4a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1d4b0 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
1d4c0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1d4d0 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20  OP_SeekGE:      
1d4e0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1d4f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1d500 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  T: {       /* ju
1d510 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1d520 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a   res;.  int oc;.
1d530 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d540 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1d550 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65  rd r;.  int nFie
1d560 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20  ld;.  i64 iKey; 
1d570 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1d580 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1d590 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
1d5a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d5b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d5c0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1d5d0 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1d5e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d5f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d600 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1d610 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1d620 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1d630 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1d640 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31  E == OP_SeekLT+1
1d650 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1d660 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65  _SeekGE == OP_Se
1d670 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65  ekLT+2 );.  asse
1d680 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d  rt( OP_SeekGT ==
1d690 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a   OP_SeekLT+3 );.
1d6a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1d6b0 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
1d6c0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1d6d0 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
1d6e0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d  p->opcode;.  pC-
1d6f0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69  >nullRow = 0;.#i
1d700 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1d710 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
1d720 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
1d730 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d 3e 69  ndif.  if( pC->i
1d740 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
1d750 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1d760 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1d770 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1d780 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1d790 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1d7a0 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1d7b0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1d7c0 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1d7d0 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1d7e0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1d7f0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
1d800 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1d810 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
1d820 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
1d830 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
1d840 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
1d850 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
1d860 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1d870 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
1d880 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
1d890 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1d8a0 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
1d8b0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1d8c0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1d8d0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1d8e0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1d8f0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
1d900 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
1d910 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
1d920 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
1d930 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
1d940 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1d950 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1d960 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1d970 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1d980 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
1d990 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1d9a0 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1d9b0 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1d9c0 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1d9d0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1d9e0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1d9f0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1da00 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1da10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1da20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  1;  VdbeBranchTa
1da30 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20  ken(1,2);.      
1da40 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1da50 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1da60 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1da70 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
1da80 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1da90 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1daa0 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1dab0 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
1dac0 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
1dad0 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
1dae0 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
1daf0 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
1db00 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
1db10 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
1db20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1db30 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
1db40 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
1db50 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
1db60 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
1db70 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
1db80 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
1db90 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
1dba0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1dbb0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1dbc0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
1dbd0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1dbe0 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
1dbf0 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
1dc00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1dc10 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
1dc20 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
1dc30 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1dc40 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1dc50 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1dc60 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
1dc70 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
1dc80 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1dc90 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1dca0 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
1dcb0 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
1dcc0 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
1dcd0 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
1dce0 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
1dcf0 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
1dd00 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
1dd10 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
1dd20 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1dd30 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
1dd40 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
1dd50 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1dd60 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
1dd70 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
1dd80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1dd90 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
1dda0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
1ddb0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1ddc0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1ddd0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
1dde0 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1ddf0 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
1de00 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  } .    rc = sqli
1de10 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1de20 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1de30 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1de40 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1de50 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
1de60 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
1de70 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
1de80 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  /.    if( rc!=SQ
1de90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1dea0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1deb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1dec0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69    }else{.    nFi
1ded0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1dee0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1def0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1df00 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
1df10 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1df20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1df30 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1df40 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1df50 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
1df60 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1df70 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1df80 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1df90 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
1dfa0 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1dfb0 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
1dfc0 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
1dfd0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1dfe0 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
1dff0 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
1e000 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1e010 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
1e020 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
1e030 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
1e040 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
1e050 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
1e060 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1e070 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
1e080 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1e090 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1e0a0 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
1e0b0 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
1e0c0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1e0d0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
1e0e0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1e0f0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1e100 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
1e110 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
1e120 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
1e130 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1e140 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1e150 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
1e160 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1e170 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1e180 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1e190 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1e1a0 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42  ndif.    ExpandB
1e1b0 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1e1c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e1d0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1e1e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1e1f0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1e200 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1e210 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1e220 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1e230 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
1e240 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1e250 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
1e260 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1e270 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
1e280 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1e290 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
1e2a0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1e2b0 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
1e2c0 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGE ){  assert( 
1e2d0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc==OP_SeekGE ||
1e2e0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29   oc==OP_SeekGT )
1e2f0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20  ;.    if( res<0 
1e300 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1e310 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a  ==OP_SeekGT) ){.
1e320 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1e330 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1e340 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70  3BtreeNext(pC->p
1e350 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1e360 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1e370 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1e380 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e390 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1e3a0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1e3b0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  }.  }else{.    a
1e3c0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1e3d0 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLT || oc==OP_S
1e3e0 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28  eekLE );.    if(
1e3f0 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d   res>0 || (res==
1e400 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1e410 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  LT) ){.      res
1e420 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
1e430 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1e440 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1e450 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1e460 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e470 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1e480 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1e490 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
1e4a0 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
1e4b0 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
1e4c0 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
1e4d0 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
1e4e0 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
1e4f0 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
1e500 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65       */.      re
1e510 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
1e520 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
1e530 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1e540 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1e550 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
1e560 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
1e570 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1e580 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1e590 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1e5a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1e5b0 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ek P1 P2 * * *.*
1e5c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74  * Synopsis:  int
1e5d0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
1e5e0 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
1e5f0 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
1e600 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
1e610 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
1e620 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
1e630 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1e640 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
1e650 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
1e660 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
1e670 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
1e680 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
1e690 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
1e6a0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
1e6b0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
1e6c0 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
1e6d0 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
1e6e0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
1e6f0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
1e700 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
1e710 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
1e720 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
1e730 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1e740 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e750 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e760 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1e770 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1e780 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1e790 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1e7a0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1e7b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1e7c0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70  ->isTable );.  p
1e7d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1e7e0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1e7f0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d  Op->p2];.  pC->m
1e800 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
1e810 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1e820 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 64  e(pIn2);.  pC->d
1e830 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e840 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20  1;.  break;.}.  
1e850 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
1e860 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1e870 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e880 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e890 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1e8a0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1e8b0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1e8c0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1e8d0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1e8e0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1e8f0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1e900 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1e910 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1e920 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1e930 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1e940 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1e950 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1e960 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1e970 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1e980 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1e990 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1e9a0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1e9b0 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1e9c0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1e9d0 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1e9e0 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
1e9f0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
1ea00 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1ea10 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
1ea20 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64   it can be.** ad
1ea30 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f  vanced in the fo
1ea40 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e  rward direction.
1ea50 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72    The Next instr
1ea60 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b  uction will work
1ea70 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65  ,.** but not the
1ea80 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f   Prev instructio
1ea90 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1eaa0 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  o: NotFound, NoC
1eab0 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73  onflict, NotExis
1eac0 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a  ts. SeekGe.*/./*
1ead0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1eae0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1eaf0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1eb00 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1eb10 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1eb20 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1eb30 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1eb40 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1eb50 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1eb60 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1eb70 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1eb80 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1eb90 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1eba0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
1ebb0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1ebc0 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1ebd0 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1ebe0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1ebf0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1ec00 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
1ec10 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1ec20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1ec30 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
1ec40 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
1ec50 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
1ec60 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
1ec70 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
1ec80 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
1ec90 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
1eca0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1ecb0 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
1ecc0 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1ecd0 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
1ece0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1ecf0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1ed00 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
1ed10 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1ed20 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
1ed30 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1ed40 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
1ed50 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
1ed60 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
1ed70 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
1ed80 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
1ed90 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
1eda0 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1edb0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
1edc0 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  sts, NoConflict.
1edd0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1ede0 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
1edf0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1ee00 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1ee10 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1ee20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1ee30 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1ee40 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1ee50 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1ee60 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1ee70 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1ee80 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1ee90 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1eea0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1eeb0 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1eec0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1eed0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1eee0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1eef0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1ef00 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e  4.** contains an
1ef10 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75  y NULL value, ju
1ef20 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1ef30 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65  o P2.  If all te
1ef40 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  rms of the.** re
1ef50 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c  cord are not-NUL
1ef60 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69  L then a check i
1ef70 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d  s done to determ
1ef80 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69  ine if any row i
1ef90 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65  n the.** P1 inde
1efa0 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61  x btree has a ma
1efb0 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69  tching key prefi
1efc0 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
1efd0 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d   no matches, jum
1efe0 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  p.** immediately
1eff0 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72   to P2.  If ther
1f000 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61  e is a match, fa
1f010 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c  ll through and l
1f020 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63  eave the P1.** c
1f030 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
1f040 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72  o the matching r
1f050 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ow..**.** This o
1f060 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72  pcode is similar
1f070 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20   to OP_NotFound 
1f080 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
1f090 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ons that the.** 
1f0a0 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73  branch is always
1f0b0 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61   taken if any pa
1f0c0 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  rt of the search
1f0d0 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55   key input is NU
1f0e0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  LL..**.** This o
1f0f0 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
1f100 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
1f110 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
1f120 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
1f130 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
1f140 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
1f150 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
1f160 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
1f170 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
1f180 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
1f190 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
1f1a0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1f1b0 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
1f1c0 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
1f1d0 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20  NoConflict:     
1f1e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f1f0 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
1f200 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
1f210 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f220 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
1f230 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f240 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
1f250 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20  sts;.  int ii;. 
1f260 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f270 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
1f280 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  ar *pFree;.  Unp
1f290 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1f2a0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
1f2b0 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
1f2c0 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
1f2d0 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
1f2e0 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
1f2f0 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a  f(Mem)*4 + 7];..
1f300 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1f310 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ST.  if( pOp->op
1f320 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code!=OP_NoConfl
1f330 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f  ict ) sqlite3_fo
1f340 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
1f350 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70  dif..  assert( p
1f360 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1f370 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1f380 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1f390 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1f3a0 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
1f3b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f3c0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f3d0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1f3e0 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
1f3f0 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
1f400 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33  e;.#endif.  pIn3
1f410 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1f420 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
1f430 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1f440 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1f450 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72  able==0 );.  pFr
1f460 65 65 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ee = 0;  /* Not 
1f470 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
1f480 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 61  ed to suppress a
1f490 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
1f4a0 67 2e 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  g. */.  if( pOp-
1f4b0 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72  >p4.i>0 ){.    r
1f4c0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1f4d0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1f4e0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
1f4f0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61  p->p4.i;.    r.a
1f500 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20  Mem = pIn3;.    
1f510 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
1f520 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
1f530 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1f540 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1f550 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45 78 70  i]) );.      Exp
1f560 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b  andBlob(&r.aMem[
1f570 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ii]);.#ifdef SQL
1f580 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20  ITE_DEBUG.      
1f590 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54 45  if( ii ) REGISTE
1f5a0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b  R_TRACE(pOp->p3+
1f5b0 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  ii, &r.aMem[ii])
1f5c0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20  ;.#endif.    }. 
1f5d0 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b     pIdxKey = &r;
1f5e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
1f5f0 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
1f600 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64  dbeAllocUnpacked
1f610 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20  Record(.        
1f620 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54  pC->pKeyInfo, aT
1f630 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61  empRec, sizeof(a
1f640 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65  TempRec), &pFree
1f650 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28 20  .    );.    if( 
1f660 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74  pIdxKey==0 ) got
1f670 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
1f680 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1f690 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1f6a0 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
1f6b0 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  In3);.    sqlite
1f6c0 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
1f6d0 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
1f6e0 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
1f6f0 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
1f700 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
1f710 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66 28  lt_rc = 0;.  if(
1f720 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1f730 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
1f740 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
1f750 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
1f760 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
1f770 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
1f780 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
1f790 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
1f7a0 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
1f7b0 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
1f7c0 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
1f7d0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
1f7e0 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46  ; ii<pIdxKey->nF
1f7f0 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
1f800 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e     if( pIdxKey->
1f810 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
1f820 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1f830 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1f840 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e 63  2 - 1; VdbeBranc
1f850 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
1f860 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1f870 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
1f880 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f890 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1f8a0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64  pC->pCursor, pId
1f8b0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
1f8c0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
1f8d0 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  .i==0 ){.    sql
1f8e0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
1f8f0 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28  Free);.  }.  if(
1f900 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f910 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
1f920 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
1f930 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61  t = res;.  alrea
1f940 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d  dyExists = (res=
1f950 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  =0);.  pC->nullR
1f960 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78  ow = 1-alreadyEx
1f970 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  ists;.  pC->defe
1f980 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1f990 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1f9a0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1f9b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1f9c0 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1f9d0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
1f9e0 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
1f9f0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
1fa00 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
1fa10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1fa20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
1fa30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1fa40 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30  alreadyExists==0
1fa50 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61 6c  ,2);.    if( !al
1fa60 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1fa70 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1fa80 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1fa90 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
1faa0 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
1fab0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1fac0 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
1fad0 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
1fae0 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
1faf0 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
1fb00 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
1fb10 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
1fb20 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67    P3 is an integ
1fb30 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31  er rowid.  If P1
1fb40 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
1fb50 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a  n a record with.
1fb60 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  ** rowid P3 then
1fb70 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1fb80 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  y to P2.  If P1 
1fb90 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72  does contain a r
1fba0 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f  ecord.** with ro
1fbb0 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61 76  wid P3 then leav
1fbc0 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
1fbd0 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
1fbe0 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a  cord and fall.**
1fbf0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1fc00 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1fc10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
1fc20 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
1fc30 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
1fc40 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
1fc50 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
1fc60 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
1fc70 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
1fc80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1fc90 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1fca0 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
1fcb0 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
1fcc0 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
1fcd0 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
1fce0 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
1fcf0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
1fd00 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
1fd10 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
1fd20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
1fd30 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
1fd40 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1fd50 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
1fd60 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ct.*/.case OP_No
1fd70 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20  tExists: {      
1fd80 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1fd90 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1fda0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1fdb0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1fdc0 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
1fdd0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1fde0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
1fdf0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1fe00 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
1fe10 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1fe20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1fe30 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1fe40 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1fe50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1fe60 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
1fe70 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
1fe80 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64  seekOp = 0;.#end
1fe90 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  if.  assert( pC-
1fea0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
1feb0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1fec0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1fed0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
1fee0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
1fef0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
1ff00 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
1ff10 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
1ff20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1ff30 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1ff40 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
1ff50 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76  &res);.  pC->mov
1ff60 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
1ff70 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
1ff80 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d  _Delete */.  pC-
1ff90 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1ffa0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1ffb0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1ffc0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1ffd0 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  eto = 0;.  VdbeB
1ffe0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
1fff0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 21  0,2);.  if( res!
20000 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
20010 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
20020 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
20030 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b   = res;.  break;
20040 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
20050 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
20060 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
20070 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
20080 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
20090 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
200a0 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
200b0 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
200c0 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
200d0 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
200e0 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
200f0 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
20100 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
20110 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
20120 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
20130 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
20140 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
20150 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
20160 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
20170 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
20180 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20190 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
201a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
201b0 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
201c0 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f  ->p1]!=0 );.  pO
201d0 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43  ut->u.i = p->apC
201e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71  sr[pOp->p1]->seq
201f0 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b  Count++;.  break
20200 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
20210 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20   NewRowid P1 P2 
20220 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
20230 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
20240 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20  **.** Get a new 
20250 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
20260 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f  umber (a.k.a "ro
20270 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68  wid") used as th
20280 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65  e key to a table
20290 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20  ..** The record 
202a0 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72  number is not pr
202b0 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73  eviously used as
202c0 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61   a key in the da
202d0 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20  tabase.** table 
202e0 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
202f0 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e  oints to.  The n
20300 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
20310 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77   is written.** w
20320 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74  ritten to regist
20330 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
20340 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20  P3>0 then P3 is 
20350 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
20360 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
20370 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68  this VDBE that h
20380 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72  olds .** the lar
20390 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20  gest previously 
203a0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
203b0 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20   number. No new 
203c0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61  record numbers a
203d0 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f  re.** allowed to
203e0 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68   be less than th
203f0 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74  is value. When t
20400 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65  his value reache
20410 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a  s its maximum, .
20420 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c  ** an SQLITE_FUL
20430 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  L error is gener
20440 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67  ated. The P3 reg
20450 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64  ister is updated
20460 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67   with the '.** g
20470 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
20480 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20  number. This P3 
20490 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65  mechanism is use
204a0 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
204b0 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49  ent the.** AUTOI
204c0 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65  NCREMENT feature
204d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77  ..*/.case OP_New
204e0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
204f0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
20500 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76  lease */.  i64 v
20510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20520 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77    /* The new row
20530 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  id */.  VdbeCurs
20540 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f  or *pC;        /
20550 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c  * Cursor of tabl
20560 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77  e to get the new
20570 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20   rowid */.  int 
20580 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
20590 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
205a0 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  an sqlite3BtreeL
205b0 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63  ast() */.  int c
205c0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
205d0 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20    /* Counter to 
205e0 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
205f0 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a   of searches */.
20600 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
20610 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
20620 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72  ster holding lar
20630 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41  gest rowid for A
20640 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
20650 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
20660 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ame;     /* Root
20670 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a   frame of VDBE *
20680 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
20690 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
206a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
206b0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
206c0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
206d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
206e0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
206f0 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43  ;.  if( NEVER(pC
20700 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b  ->pCursor==0) ){
20710 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f  .    /* The zero
20720 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
20730 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61  above is all tha
20740 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20  t is needed */. 
20750 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
20760 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72  he next rowid or
20770 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
20780 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20  different terms 
20790 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20  for the same.   
207a0 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62   ** thing) is ob
207b0 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d  tained in a two-
207c0 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  step algorithm..
207d0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69      **.    ** Fi
207e0 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74  rst we attempt t
207f0 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65  o find the large
20800 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
20810 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20  d and add one.  
20820 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42    ** to that.  B
20830 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73  ut if the larges
20840 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
20850 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20   is already the 
20860 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70  maximum.    ** p
20870 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c  ositive integer,
20880 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c   we have to fall
20890 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
208a0 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72  second.    ** pr
208b0 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f  obabilistic algo
208c0 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20  rithm.    **.   
208d0 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61   ** The second a
208e0 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73  lgorithm is to s
208f0 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74  elect a rowid at
20900 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20   random and see 
20910 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72  if.    ** it alr
20920 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74  eady exists in t
20930 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74  he table.  If it
20940 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
20950 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20   we have.    ** 
20960 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74  succeeded.  If t
20970 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  he random rowid 
20980 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73  does exist, we s
20990 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a  elect a new one.
209a0 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61      ** and try a
209b0 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20  gain, up to 100 
209c0 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20  times..    */.  
209d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
209e0 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66  Table );..#ifdef
209f0 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
20a00 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d  WID.#   define M
20a10 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66  AX_ROWID 0x7ffff
20a20 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a  fff.#else.    /*
20a30 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20   Some compilers 
20a40 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63  complain about c
20a50 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20  onstants of the 
20a60 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66  form 0x7ffffffff
20a70 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20  fffffff..    ** 
20a80 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  Others complain 
20a90 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66  about 0x7fffffff
20aa0 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68  fffffffffLL.  Th
20ab0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
20ac0 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74  o seems.    ** t
20ad0 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f  o provide the co
20ae0 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b  nstant while mak
20af0 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72  ing all compiler
20b00 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a  s happy..    */.
20b10 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
20b20 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28  OWID  (i64)( (((
20b30 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  u64)0x7fffffff)<
20b40 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66  <32) | (u64)0xff
20b50 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a  ffffff ).#endif.
20b60 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73  .    if( !pC->us
20b70 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
20b80 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
20b90 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
20ba0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
20bb0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
20bc0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
20bd0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20be0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20bf0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
20c00 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  s ){.        v =
20c10 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d   1;   /* IMP: R-
20c20 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20  61914-48074 */. 
20c30 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20c40 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
20c50 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
20c60 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Valid(pC->pCurso
20c70 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  r) );.        rc
20c80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
20c90 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
20ca0 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
20cb0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
20cc0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43  ITE_OK );   /* C
20cd0 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f  annot fail follo
20ce0 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29  wing BtreeLast()
20cf0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
20d00 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a  v>=MAX_ROWID ){.
20d10 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73            pC->us
20d20 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31  eRandomRowid = 1
20d30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
20d40 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20  .          v++; 
20d50 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33    /* IMP: R-2953
20d60 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20  8-34987 */.     
20d70 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
20d80 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
20d90 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
20da0 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f  EMENT.    if( pO
20db0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f  p->p3 ){.      /
20dc0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
20dd0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
20de0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
20df0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20e00 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  3>0 );.      if(
20e10 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
20e20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65        for(pFrame
20e30 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
20e40 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
20e50 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
20e60 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  ent);.        /*
20e70 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
20e80 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
20e90 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
20ea0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20eb0 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d  p3<=pFrame->nMem
20ec0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
20ed0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
20ee0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
20ef0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
20f00 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
20f10 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
20f20 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
20f30 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20f40 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
20f50 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
20f60 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
20f70 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
20f80 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
20f90 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
20fa0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
20fb0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
20fc0 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20  (pMem) );..     
20fd0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
20fe0 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
20ff0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
21000 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
21010 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Mem);.      asse
21020 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
21030 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
21040 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
21050 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
21060 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d  /.      if( pMem
21070 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
21080 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
21090 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
210a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
210b0 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
210c0 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20  12275-61338 */. 
210d0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
210e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
210f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
21100 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20  ( v<pMem->u.i+1 
21110 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70  ){.        v = p
21120 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
21130 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d      }.      pMem
21140 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d  ->u.i = v;.    }
21150 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
21160 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
21170 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
21180 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
21190 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
211a0 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
211b0 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
211c0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
211d0 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
211e0 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
211f0 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
21200 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
21210 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
21220 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
21230 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
21240 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
21250 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
21260 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
21270 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
21280 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
21290 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
212a0 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
212b0 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
212c0 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
212d0 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212f0 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
21300 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
21310 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  e. */.      cnt 
21320 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  = 0;.      do{. 
21330 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
21340 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66  andomness(sizeof
21350 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  (v), &v);.      
21360 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
21370 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20  D>>1); v++;  /* 
21380 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73  Ensure that v is
21390 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
213a0 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69  ro */.      }whi
213b0 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69  le(  ((rc = sqli
213c0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
213d0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
213e0 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20  or, 0, (u64)v,. 
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54  0, &res))==SQLIT
21430 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20  E_OK).          
21440 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20    && (res==0).  
21450 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b            && (++
21460 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20  cnt<100));.     
21470 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
21480 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
21490 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
214a0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
214b0 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
214c0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
214d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
214e0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
214f0 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
21500 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
21510 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
21520 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
21530 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21540 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21550 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21560 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
21570 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
21580 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
21590 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
215a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
215b0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
215c0 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
215d0 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
215e0 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
215f0 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
21600 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
21610 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
21620 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
21630 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
21640 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
21650 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
21660 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
21670 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
21680 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
21690 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
216a0 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
216b0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
216c0 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
216d0 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
216e0 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
216f0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
21700 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
21710 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
21720 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
21730 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
21740 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
21750 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
21760 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
21770 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
21780 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
21790 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
217a0 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
217b0 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
217c0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
217d0 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
217e0 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
217f0 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
21800 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
21810 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
21820 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
21830 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
21840 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
21850 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
21860 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
21870 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
21880 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
21890 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
218a0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
218b0 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
218c0 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
218d0 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
218e0 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
218f0 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
21900 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
21910 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
21920 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
21930 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
21940 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
21950 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
21960 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
21970 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
21980 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
21990 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
219a0 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
219b0 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
219c0 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
219d0 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
219e0 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
219f0 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
21a00 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
21a10 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
21a20 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
21a30 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
21a40 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
21a50 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
21a60 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
21a70 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
21a80 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
21a90 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
21aa0 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
21ab0 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
21ac0 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
21ad0 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
21ae0 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
21af0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
21b00 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
21b10 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
21b20 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
21b30 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
21b40 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
21b50 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
21b60 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
21b70 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
21b80 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
21b90 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
21ba0 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
21bb0 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
21bc0 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
21bd0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
21be0 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
21bf0 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
21c00 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
21c10 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
21c20 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
21c30 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
21c40 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
21c50 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
21c60 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
21c70 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
21c80 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
21c90 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
21ca0 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
21cb0 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
21cc0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
21cd0 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
21ce0 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
21cf0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
21d00 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
21d10 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
21d20 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
21d30 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
21d40 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
21d50 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  s:  intkey=P3 da
21d60 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
21d70 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
21d80 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
21d90 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
21da0 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
21db0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
21dc0 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
21dd0 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
21de0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
21df0 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
21e00 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
21e10 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
21e20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
21e30 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
21e40 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
21e50 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
21e60 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
21e70 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
21e80 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
21e90 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
21ea0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
21eb0 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f   iKey;         /
21ec0 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
21ed0 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
21ee0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
21ef0 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64  inserted */.  Vd
21f00 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
21f10 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
21f20 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
21f30 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
21f40 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
21f50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21f60 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74   of zero-bytes t
21f70 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e  o append */.  in
21f80 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
21f90 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
21fa0 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
21fb0 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
21fc0 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
21fd0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
21fe0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
21ff0 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
22000 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e  te hook */.  con
22010 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f  st char *zTbl; /
22020 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75  * Table name - u
22030 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74  sed by the opdat
22040 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20  e hook */.  int 
22050 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
22060 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
22070 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
22080 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
22090 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
220a0 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
220b0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
220c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
220d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
220e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
220f0 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
22100 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
22110 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
22120 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
22130 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
22140 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
22150 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
22160 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
22170 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22180 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54  able );.  REGIST
22190 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
221a0 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
221b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
221c0 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
221d0 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
221e0 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
221f0 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
22200 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
22210 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
22220 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
22230 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
22240 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
22250 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75    iKey = pKey->u
22260 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
22270 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
22280 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
22290 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  nt );.    iKey =
222a0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
222b0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
222c0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
222d0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
222e0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
222f0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
22300 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
22310 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65   lastRowid = iKe
22320 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
22330 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
22340 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
22350 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
22360 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
22370 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
22380 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
22390 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
223a0 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
223b0 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
223c0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
223d0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
223e0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
223f0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
22400 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
22410 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
22420 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
22430 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
22440 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  0;.  }.  rc = sq
22450 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
22460 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
22470 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
224a0 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224c0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
224d0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21   OPFLAG_APPEND)!
224e0 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  =0, seekResult. 
224f0 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   );.  pC->deferr
22500 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
22510 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22520 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
22530 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
22540 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
22550 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
22560 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22570 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
22580 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
22590 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
225a0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
225b0 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
225c0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
225d0 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
225e0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
225f0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
22600 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
22610 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
22620 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
22630 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
22640 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
22650 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
22660 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
22670 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
22680 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
22690 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
226a0 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
226b0 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
226c0 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
226d0 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
226e0 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
226f0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
22700 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
22710 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
22720 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
22730 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
22740 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
22750 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
22760 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
22770 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
22780 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
22790 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
227a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
227b0 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
227c0 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
227d0 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
227e0 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
227f0 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a   a Next loop..**
22800 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
22810 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
22820 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65  f P2 is set, the
22830 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
22840 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
22850 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
22860 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20  ise not)..**.** 
22870 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70  P1 must not be p
22880 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74  seudo-table.  It
22890 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61   has to be a rea
228a0 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20  l table with.** 
228b0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a  multiple rows..*
228c0 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
228d0 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20  t NULL, then it 
228e0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
228f0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31  he table that P1
22900 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20   is.** pointing 
22910 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20  to.  The update 
22920 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
22930 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73  oked, if it exis
22940 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  ts..** If P4 is 
22950 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  not NULL then th
22960 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
22970 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
22980 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f  ioned.** using O
22990 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72  P_NotFound prior
229a0 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69   to invoking thi
229b0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
229c0 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20  e OP_Delete: {. 
229d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
229e0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
229f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22a00 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22a10 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22a20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22a30 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
22a40 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
22a50 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  or!=0 );  /* Onl
22a60 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c  y valid for real
22a70 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75   tables, no pseu
22a80 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73  dotables */.  as
22a90 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
22aa0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a  edMoveto==0 );..
22ab0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
22ac0 42 55 47 0a 20 20 2f 2a 20 54 68 65 20 73 65 65  BUG.  /* The see
22ad0 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74  k operation that
22ae0 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
22af0 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 20  cursor prior to 
22b00 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 0a 20  OP_Delete will. 
22b10 20 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20 73 65   ** have also se
22b20 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f  t the pC->moveto
22b30 54 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20  Target field to 
22b40 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
22b50 20 72 6f 77 20 74 68 61 74 0a 20 20 2a 2a 20 69   row that.  ** i
22b60 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  s being deleted 
22b70 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
22b80 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  .z && pC->isTabl
22b90 65 20 29 7b 0a 20 20 20 20 69 36 34 20 69 4b 65  e ){.    i64 iKe
22ba0 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  y = 0;.    sqlit
22bb0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
22bc0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 69 4b 65  C->pCursor, &iKe
22bd0 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
22be0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
22bf0 3d 3d 69 4b 65 79 20 29 3b 20 0a 20 20 7d 0a 23  ==iKey ); .  }.#
22c00 65 6e 64 69 66 0a 20 0a 20 20 72 63 20 3d 20 73  endif. .  rc = s
22c10 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
22c20 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  e(pC->pCursor);.
22c30 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22c40 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22c50 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
22c60 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
22c70 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
22c80 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
22c90 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
22ca0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
22cb0 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54  >p4.z && pC->isT
22cc0 61 62 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e  able ){.    db->
22cd0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
22ce0 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
22cf0 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20  SQLITE_DELETE,. 
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d10 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70         db->aDb[p
22d20 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70  C->iDb].zName, p
22d30 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f  Op->p4.z, pC->mo
22d40 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20  vetoTarget);.   
22d50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
22d60 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=0 );.  }.  if(
22d70 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
22d80 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
22d90 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61  Change++;.  brea
22da0 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
22db0 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
22dc0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
22dd0 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
22de0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
22df0 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
22e00 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
22e10 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
22e20 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
22e30 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
22e40 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
22e50 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
22e60 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
22e70 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
22e80 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
22e90 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
22ea0 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
22eb0 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
22ec0 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
22ed0 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
22ee0 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
22ef0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
22f00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22f10 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f  Opcode: SorterCo
22f20 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
22f30 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  4.** Synopsis:  
22f40 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d  if key(P1)!=trim
22f50 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20  (r[P3],P4) goto 
22f60 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P2.**.** P1 is a
22f70 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
22f80 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
22f90 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66   compares a pref
22fa0 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63  ix of the.** rec
22fb0 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  ord blob in regi
22fc0 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20  ster P3 against 
22fd0 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
22fe0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74  entry that .** t
22ff0 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  he sorter cursor
23000 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
23010 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20  s to.  Only the 
23020 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a  first P4 fields.
23030 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20  ** of r[P3] and 
23040 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72  the sorter recor
23050 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a  d are compared..
23060 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
23070 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72  P3 or the sorter
23080 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c   contains a NULL
23090 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72   in one of their
230a0 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20   significant.** 
230b0 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e  fields (not coun
230c0 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c  ting the P4 fiel
230d0 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68  ds at the end wh
230e0 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29  ich are ignored)
230f0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d   then.** the com
23100 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d  parison is assum
23110 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a  ed to be equal..
23120 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
23130 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72  gh to next instr
23140 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77  uction if the tw
23150 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72  o records compar
23160 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61  e equal to.** ea
23170 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20  ch other.  Jump 
23180 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72  to P2 if they ar
23190 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a  e different..*/.
231a0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f  case OP_SorterCo
231b0 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43  mpare: {.  VdbeC
231c0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
231d0 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79   res;.  int nKey
231e0 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  Col;..  pC = p->
231f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23200 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
23210 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65  er(pC) );.  asse
23220 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
23230 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
23240 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
23250 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20  >p3];.  nKeyCol 
23260 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72  = pOp->p4.i;.  r
23270 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
23280 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
23290 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33  Compare(pC, pIn3
232a0 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29  , nKeyCol, &res)
232b0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
232c0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
232d0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
232e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
232f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a    }.  break;.};.
23300 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
23310 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20  erData P1 P2 P3 
23320 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
23330 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
23340 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
23350 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72  ister P2 the cur
23360 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61  rent sorter data
23370 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73   for sorter curs
23380 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63  or P1..** Then c
23390 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  lear the column 
233a0 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20  header cache on 
233b0 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  cursor P3..**.**
233c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
233d0 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20  normally use to 
233e0 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75  move a record ou
233f0 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20  t of the sorter 
23400 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65  and into.** a re
23410 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74  gister that is t
23420 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20  he source for a 
23430 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
23440 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e  sor created usin
23450 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e  g.** OpenPseudo.
23460 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61    That pseudo-ta
23470 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68  ble cursor is th
23480 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64  e one that is id
23490 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70  entified by.** p
234a0 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c  arameter P3.  Cl
234b0 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f  earing the P3 co
234c0 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61  lumn cache as pa
234d0 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  rt of this opcod
234e0 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72  e saves.** us fr
234f0 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73  om having to iss
23500 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75  ue a separate Nu
23510 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f  llRow instructio
23520 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20  n to clear that 
23530 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cache..*/.case O
23540 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a  P_SorterData: {.
23550 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23560 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
23570 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
23580 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23590 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
235a0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
235b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
235c0 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70  beSorterRowkey(p
235d0 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65  C, pOut);.  asse
235e0 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
235f0 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67  K || (pOut->flag
23600 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b  s & MEM_Blob) );
23610 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23620 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23630 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23640 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23650 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  3]->cacheStatus 
23660 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
23670 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23680 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31  code: RowData P1
23690 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
236a0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
236b0 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
236c0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
236d0 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
236e0 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20  data for cursor 
236f0 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
23700 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
23710 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
23720 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
23730 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
23740 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
23750 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
23760 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
23770 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
23780 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
23790 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
237a0 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
237b0 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
237c0 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
237d0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
237e0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f  eudo-table..*/./
237f0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79  * Opcode: RowKey
23800 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
23810 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
23820 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  key.**.** Write 
23830 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
23840 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
23850 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72  w key for cursor
23860 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
23870 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
23880 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
23890 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20   .** The key is 
238a0 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
238b0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
238c0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
238d0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
238e0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
238f0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
23900 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
23910 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
23920 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
23930 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
23940 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
23950 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
23960 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a  case OP_RowKey:.
23970 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
23980 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
23990 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
239a0 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
239b0 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70  .  i64 n64;..  p
239c0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
239d0 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
239e0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
239f0 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68  );..  /* Note th
23a00 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f  at RowKey and Ro
23a10 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79  wData are really
23a20 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
23a30 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  e instruction */
23a40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23a50 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23a60 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23a70 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23a80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23a90 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
23aa0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23ab0 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70  pC->isTable || p
23ac0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52  Op->opcode!=OP_R
23ad0 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
23ae0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
23af0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 || pOp->opcod
23b00 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e==OP_RowData );
23b10 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23b20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23b30 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
23b40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
23b50 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
23b60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23b70 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
23b80 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
23b90 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  rsor;..  /* The 
23ba0 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
23bb0 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
23bc0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
23bd0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
23be0 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
23bf0 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
23c00 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
23c10 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
23c20 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
23c30 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 49  * the cursor.  I
23c40 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74  f this where not
23c50 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66   the case, on of
23c60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
23c70 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f  ssert()s.  ** wo
23c80 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c  uld fail.  Shoul
23c90 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e  d this ever chan
23ca0 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63  ge (because of c
23cb0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f  hanges in the co
23cc0 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f  de.  ** generato
23cd0 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20  r) then the fix 
23ce0 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65  would be to inse
23cf0 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  rt a call to.  *
23d00 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  * sqlite3VdbeCur
23d10 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a  sorMoveto()..  *
23d20 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
23d30 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
23d40 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
23d50 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
23d60 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
23d70 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74  );.#if 0  /* Not
23d80 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f   required due to
23d90 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f   the previous to
23da0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
23db0 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ents */.  rc = s
23dc0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
23dd0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
23de0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
23df0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
23e00 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
23e10 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  f..  if( pC->isT
23e20 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61  able==0 ){.    a
23e30 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
23e40 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f  ble );.    VVA_O
23e50 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
23e60 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
23e70 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20  rsr, &n64);.    
23e80 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
23e90 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54  TE_OK );    /* T
23ea0 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
23eb0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
23ec0 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
23ed0 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d  if( n64>db->aLim
23ee0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
23ef0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
23f00 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
23f10 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33     }.    n = (u3
23f20 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2)n64;.  }else{.
23f30 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
23f40 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
23f50 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
23f60 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  n);.    assert( 
23f70 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
23f80 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28      /* DataSize(
23f90 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
23fa0 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29  .    if( n>(u32)
23fb0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
23fc0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
23fd0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
23fe0 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_big;.    }.  }
23ff0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d  .  testcase( n==
24000 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
24010 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
24020 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d 41  dResize(pOut, MA
24030 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20 20  X(n,32)) ){.    
24040 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
24050 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a  .  pOut->n = n;.
24060 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
24070 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pOut, MEM_Blob)
24080 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  ;.  if( pC->isTa
24090 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  ble==0 ){.    rc
240a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
240b0 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
240c0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
240d0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
240e0 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
240f0 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
24100 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
24110 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
24120 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
24130 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
24140 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
24150 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
24160 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52  BSIZE(pOut);.  R
24170 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
24180 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
24190 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
241a0 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
241b0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
241c0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
241d0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
241e0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
241f0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
24200 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
24210 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
24220 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
24230 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
24240 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
24250 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
24260 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
24270 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
24280 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
24290 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
242a0 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
242b0 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
242c0 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
242d0 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
242e0 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
242f0 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
24300 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
24310 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
24320 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
24330 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ease */.  VdbeCu
24340 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
24350 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
24360 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
24370 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
24380 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
24390 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
243a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
243b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
243c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
243d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
243e0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
243f0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
24400 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75  Reg==0 || pC->nu
24410 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
24420 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
24430 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
24440 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
24450 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
24460 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24470 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
24480 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
24490 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
244a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
244b0 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
244c0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b  ->pVtabCursor ){
244d0 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d  .    pVtab = pC-
244e0 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
244f0 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65  tab;.    pModule
24500 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
24510 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
24520 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29  Module->xRowid )
24530 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
24540 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70  le->xRowid(pC->p
24550 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b  VtabCursor, &v);
24560 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
24570 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
24580 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f  pVtab);.#endif /
24590 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
245a0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20  RTUALTABLE */.  
245b0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
245c0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
245d0 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
245e0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
245f0 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20  estore(pC);.    
24600 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
24610 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
24620 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
24630 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
24640 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
24650 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65  _Null;.      bre
24660 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  ak;.    }.    rc
24670 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
24680 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
24690 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 61 73 73  or, &v);.    ass
246a0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
246b0 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73  OK );  /* Always
246c0 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43   so because of C
246d0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61  ursorRestore() a
246e0 62 6f 76 65 20 2a 2f 0a 20 20 7d 0a 20 20 70 4f  bove */.  }.  pO
246f0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
24700 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24710 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a  de: NullRow P1 *
24720 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76   * * *.**.** Mov
24730 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  e the cursor P1 
24740 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20  to a null row.  
24750 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  Any OP_Column op
24760 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74  erations.** that
24770 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
24780 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68   cursor is on th
24790 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20  e null row will 
247a0 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20  always.** write 
247b0 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  a NULL..*/.case 
247c0 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20  OP_NullRow: {.  
247d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
247e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
247f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24800 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24810 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24820 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24830 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
24840 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
24850 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
24860 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
24870 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
24880 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
24890 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
248a0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
248b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
248c0 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50  * Opcode: Last P
248d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
248e0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
248f0 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
24900 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73  lumn or Prev ins
24910 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
24920 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
24930 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
24940 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
24950 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
24960 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
24970 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
24980 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
24990 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
249a0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
249b0 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
249c0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
249d0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
249e0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
249f0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
24a00 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
24a10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
24a20 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
24a30 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
24a40 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
24a50 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
24a60 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
24a70 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
24a80 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
24a90 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
24aa0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
24ab0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
24ac0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
24ad0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
24ae0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
24af0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
24b00 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
24b10 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
24b20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
24b30 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
24b40 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
24b50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24b60 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
24b70 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
24b80 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20  Cursor;.  res = 
24b90 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  0;.  assert( pCr
24ba0 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  sr!=0 );.  rc = 
24bb0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
24bc0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
24bd0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
24be0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
24bf0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
24c00 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
24c10 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24c20 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
24c30 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
24c40 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23  kOp = OP_Last;.#
24c50 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
24c60 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62  >p2>0 ){.    Vdb
24c70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
24c80 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
24c90 72 65 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  res ) pc = pOp->
24ca0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
24cb0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
24cc0 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a  de: Sort P1 P2 *
24cd0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
24ce0 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63  opcode does exac
24cf0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69  tly the same thi
24d00 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20  ng as OP_Rewind 
24d10 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69  except that.** i
24d20 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20  t increments an 
24d30 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f  undocumented glo
24d40 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65  bal variable use
24d50 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a  d for testing..*
24d60 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20  *.** Sorting is 
24d70 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20  accomplished by 
24d80 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20  writing records 
24d90 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69  into a sorting i
24da0 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  ndex,.** then re
24db0 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64  winding that ind
24dc0 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69  ex and playing i
24dd0 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69  t back from begi
24de0 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e  nning to.** end.
24df0 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f    We use the OP_
24e00 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74  Sort opcode inst
24e10 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64  ead of OP_Rewind
24e20 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65   to do the.** re
24e30 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20  winding so that 
24e40 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
24e50 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72  ble will be incr
24e60 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72  emented and.** r
24e70 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
24e80 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68  can determine wh
24e90 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
24ea0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a   optimizer is.**
24eb0 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d   correctly optim
24ec0 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e  izing out sorts.
24ed0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
24ee0 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75  erSort:    /* ju
24ef0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  mp */.case OP_So
24f00 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
24f10 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53  jump */.#ifdef S
24f20 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
24f30 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b  ite3_sort_count+
24f40 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  +;.  sqlite3_sea
24f50 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e  rch_count--;.#en
24f60 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65  dif.  p->aCounte
24f70 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
24f80 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f  TUS_SORT]++;.  /
24f90 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
24fa0 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f  nto OP_Rewind */
24fb0 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
24fc0 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  wind P1 P2 * * *
24fd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
24fe0 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
24ff0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
25000 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
25010 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
25020 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  efer to the firs
25030 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
25040 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
25050 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
25060 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
25070 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20   is empty, jump 
25080 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
25090 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  2..** If the tab
250a0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
250b0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
250c0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f  hrough to the fo
250d0 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74  llowing .** inst
250e0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
250f0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
25100 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
25110 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
25120 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
25130 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
25140 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
25150 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
25160 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
25170 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
25180 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
25190 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63  , not Prev..*/.c
251a0 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
251b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
251c0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
251d0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
251e0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
251f0 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
25200 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25210 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25220 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25230 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25240 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25250 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
25260 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
25270 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f  ode==OP_SorterSo
25280 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rt) );.  res = 1
25290 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
252a0 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
252b0 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a  Op = OP_Rewind;.
252c0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53  #endif.  if( isS
252d0 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
252e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
252f0 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43  eSorterRewind(pC
25300 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65  , &res);.  }else
25310 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  {.    pCrsr = pC
25320 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  ->pCursor;.    a
25330 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
25340 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25350 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
25360 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
25370 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
25380 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
25390 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
253a0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 43  _STALE;.  }.  pC
253b0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
253c0 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
253d0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
253e0 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
253f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
25400 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
25410 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
25420 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
25430 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
25440 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
25450 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
25460 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
25470 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
25480 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
25490 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
254a0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
254b0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
254c0 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
254d0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
254e0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
254f0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
25500 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
25510 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
25520 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
25530 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
25540 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
25550 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
25560 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
25570 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
25580 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47  llowing an SeekG
25590 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a  T, SeekGE, or.**
255a0 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64   OP_Rewind opcod
255b0 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
255c0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
255d0 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Next is not allo
255e0 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
255f0 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
25600 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a   or OP_Last..**.
25610 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
25620 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
25630 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
25640 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
25650 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  P1 must have.** 
25660 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f  been opened prio
25670 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  r to this opcode
25680 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20   or the program 
25690 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a  will segfault..*
256a0 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
256b0 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
256c0 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
256d0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
256e0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
256f0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
25700 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
25710 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
25720 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
25730 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
25740 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
25750 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
25760 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
25770 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
25780 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
25790 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
257a0 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
257b0 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
257c0 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
257d0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
257e0 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
257f0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
25800 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
25810 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
25820 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
25830 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
25840 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
25850 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
25860 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
25870 3a 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70  : Prev, NextIfOp
25880 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  en.*/./* Opcode:
25890 20 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50   NextIfOpen P1 P
258a0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
258b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
258c0 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78  ks just like Nex
258d0 74 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  t except that if
258e0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
258f0 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
25900 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
25910 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
25920 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25930 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
25940 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
25950 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
25960 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
25970 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
25980 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
25990 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
259a0 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
259b0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
259c0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
259d0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
259e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
259f0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
25a00 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
25a10 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
25a20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
25a30 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2..**.**.** The 
25a40 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
25a50 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
25a60 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53  ing an SeekLT, S
25a70 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekLE, or.** OP_
25a80 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64  Last opcode used
25a90 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
25aa0 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69   cursor.  Prev i
25ab0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
25ac0 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47   to follow SeekG
25ad0 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50  T, SeekGE, or OP
25ae0 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54  _Rewind..**.** T
25af0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
25b00 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
25b10 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
25b20 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50  udo-table.  If P
25b30 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e  1 is.** not open
25b40 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
25b50 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
25b60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61  .**.** The P3 va
25b70 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f  lue is a hint to
25b80 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65   the btree imple
25b90 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33  mentation. If P3
25ba0 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61  ==1, that.** mea
25bb0 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20  ns P1 is an SQL 
25bc0 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74  index and that t
25bd0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
25be0 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  could have been.
25bf0 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68  ** omitted if th
25c00 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65  at index had bee
25c10 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73  n unique.  P3 is
25c20 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20   usually 0.  P3 
25c30 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74  is.** always eit
25c40 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a  her 0 or 1..**.*
25c50 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
25c60 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
25c70 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
25c80 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
25c90 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
25ca0 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a  ePrevious()..**.
25cb0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
25cc0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
25cd0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
25ce0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
25cf0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
25d00 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
25d10 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
25d20 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mented..*/./* Op
25d30 63 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e  code: PrevIfOpen
25d40 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25d50 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
25d60 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
25d70 65 20 50 72 65 76 20 65 78 63 65 70 74 20 74 68  e Prev except th
25d80 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
25d90 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
25da0 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
25db0 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  p..*/.case OP_So
25dc0 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20  rterNext: {  /* 
25dd0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
25de0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
25df0 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  res;..  pC = p->
25e00 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
25e10 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
25e20 65 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20  er(pC) );.  res 
25e30 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
25e40 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
25e50 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b  t(db, pC, &res);
25e60 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69  .  goto next_tai
25e70 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49  l;.case OP_PrevI
25e80 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
25e90 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
25ea0 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  tIfOpen:    /* j
25eb0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e  ump */.  if( p->
25ec0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d  apCsr[pOp->p1]==
25ed0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
25ee0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a  Fall through */.
25ef0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
25f00 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
25f10 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
25f20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
25f30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
25f40 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25f50 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25f60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25f70 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  >p5<ArraySize(p-
25f80 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
25f90 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25fa0 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20  p->p1];.  res = 
25fb0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
25fc0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
25fd0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
25fe0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
25ff0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
26000 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
26010 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73  ( res==0 || (res
26020 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62  ==1 && pC->isTab
26030 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74  le==0) );.  test
26040 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a  case( res==1 );.
26050 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26060 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
26070 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
26080 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
26090 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
260a0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
260b0 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
260c0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
260d0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
260e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
260f0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
26100 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d  xtIfOpen || pOp-
26110 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
26120 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
26130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26140 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
26150 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70  IfOpen || pOp->p
26160 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
26170 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
26180 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78  );..  /* The Nex
26190 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
261a0 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
261b0 47 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20  GT, SeekGE, and 
261c0 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65  Rewind..  ** The
261d0 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20   Prev opcode is 
261e0 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20  only used after 
261f0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
26200 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61  and Last. */.  a
26210 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26220 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
26230 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
26240 65 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20  extIfOpen.      
26250 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
26260 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d  OP_SeekGT || pC-
26270 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
26280 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  GE.       || pC-
26290 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69  >seekOp==OP_Rewi
262a0 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  nd || pC->seekOp
262b0 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61  ==OP_Found);.  a
262c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
262d0 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
262e0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
262f0 72 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20  revIfOpen.      
26300 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
26310 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d  OP_SeekLT || pC-
26320 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
26330 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  LE.       || pC-
26340 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74  >seekOp==OP_Last
26350 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d   );..  rc = pOp-
26360 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
26370 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
26380 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43  .next_tail:.  pC
26390 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
263a0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56  CACHE_STALE;.  V
263b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
263c0 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es==0,2);.  if( 
263d0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43  res==0 ){.    pC
263e0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
263f0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
26400 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75  - 1;.    p->aCou
26410 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b  nter[pOp->p5]++;
26420 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
26430 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
26440 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
26450 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a  #endif.  }else{.
26460 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
26470 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  = 1;.  }.  goto 
26480 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
26490 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
264a0 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
264b0 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79  P2 P3 * P5.** Sy
264c0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
264d0 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
264e0 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
264f0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
26500 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
26510 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
26520 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
26530 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
26540 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
26550 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
26560 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
26570 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
26580 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
26590 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
265a0 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
265b0 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
265c0 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
265d0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
265e0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
265f0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
26600 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  GE bit set, then
26610 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
26620 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  ter is.** increm
26630 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e  ented by this in
26640 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
26650 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
26660 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a  E bit is clear,.
26670 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  ** then the chan
26680 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e  ge counter is un
26690 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  changed..**.** I
266a0 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
266b0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
266c0 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  T bit set, then 
266d0 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
266e0 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e  have.** just don
266f0 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20  e a seek to the 
26700 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e  spot where the n
26710 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62  ew entry is to b
26720 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54  e inserted..** T
26730 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20  his flag avoids 
26740 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73  doing an extra s
26750 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  eek..**.** This 
26760 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
26770 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
26780 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
26790 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
267a0 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
267b0 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63   OP_Insert..*/.c
267c0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
267d0 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
267e0 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
267f0 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
26800 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
26810 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
26820 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
26830 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f    int nKey;.  co
26840 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
26850 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26860 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
26870 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
26880 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26890 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
268a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
268b0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
268c0 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
268d0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
268e0 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
268f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26900 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
26910 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
26920 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
26930 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
26940 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
26950 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
26960 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
26970 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
26980 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
26990 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20  able==0 );.  rc 
269a0 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
269b0 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  2);.  if( rc==SQ
269c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
269d0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
269e0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
269f0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57  lite3VdbeSorterW
26a00 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a  rite(pC, pIn2);.
26a10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
26a20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b   nKey = pIn2->n;
26a30 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49  .      zKey = pI
26a40 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20  n2->z;.      rc 
26a50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
26a60 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79  sert(pCrsr, zKey
26a70 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30  , nKey, "", 0, 0
26a80 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20  , pOp->p3, .    
26a90 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
26aa0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
26ab0 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
26ac0 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
26ad0 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20          );.     
26ae0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
26af0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
26b00 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
26b10 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
26b20 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
26b30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26b40 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
26b50 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
26b60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
26b70 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54  r[P2@P3].**.** T
26b80 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
26b90 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
26ba0 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
26bb0 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
26bc0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
26bd0 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
26be0 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
26bf0 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
26c00 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
26c10 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
26c20 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
26c30 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26c40 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
26c50 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
26c60 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
26c70 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
26c80 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
26c90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
26ca0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
26cb0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
26cc0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
26cd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26ce0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26cf0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
26d00 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
26d10 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
26d20 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
26d30 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
26d40 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
26d50 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26d60 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
26d70 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
26d80 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
26d90 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
26da0 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75  p->p3;.  r.defau
26db0 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61  lt_rc = 0;.  r.a
26dc0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
26dd0 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
26de0 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e  ITE_DEBUG.  { in
26df0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
26e00 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
26e10 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
26e20 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
26e30 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d   }.#endif.  rc =
26e40 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
26e50 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
26e60 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
26e70 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
26e80 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
26e90 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
26ea0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
26eb0 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61  (pCrsr);.  }.  a
26ec0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
26ed0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
26ee0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
26ef0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26f00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26f10 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
26f20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
26f30 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
26f40 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
26f50 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
26f60 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
26f70 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
26f80 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
26f90 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
26fa0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
26fb0 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
26fc0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
26fd0 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
26fe0 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
26ff0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
27000 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
27010 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
27020 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
27030 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
27040 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
27050 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27070 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
27080 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
27090 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73  Crsr;.  VdbeCurs
270a0 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f  or *pC;.  i64 ro
270b0 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  wid;..  assert( 
270c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
270d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
270e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
270f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27100 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27110 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
27120 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
27130 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
27140 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
27150 4d 5f 4e 75 6c 6c 3b 0a 20 20 61 73 73 65 72 74  M_Null;.  assert
27160 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
27170 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27180 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27190 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c  ==0 );..  /* sql
271a0 69 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73  ite3VbeCursorRes
271b0 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20  tore() can only 
271c0 66 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f  fail if the reco
271d0 72 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65  rd has been dele
271e0 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f  ted.  ** out fro
271f0 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73  m under the curs
27200 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e  or.  That will n
27210 65 76 65 72 20 68 61 70 70 65 6e 64 20 66 6f 72  ever happend for
27220 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a   an IdxRowid.  *
27230 2a 20 6f 70 63 6f 64 65 2c 20 68 65 6e 63 65 20  * opcode, hence 
27240 74 68 65 20 4e 45 56 45 52 28 29 20 61 72 72 6f  the NEVER() arro
27250 75 6e 64 20 74 68 65 20 63 68 65 63 6b 20 6f 66  und the check of
27260 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   the return valu
27270 65 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73  e..  */.  rc = s
27280 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
27290 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 69  Restore(pC);.  i
272a0 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
272b0 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
272c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
272d0 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e  r;..  if( !pC->n
272e0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f  ullRow ){.    ro
272f0 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  wid = 0;  /* Not
27300 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
27310 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
27320 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
27330 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
27340 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
27350 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
27360 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
27370 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
27380 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27390 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
273a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
273b0 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  d;.    pOut->fla
273c0 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
273d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
273e0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
273f0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
27400 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
27410 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
27420 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
27430 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
27440 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
27450 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
27460 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
27470 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27480 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
27490 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
274a0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
274b0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
274c0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
274d0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
274e0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
274f0 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
27500 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
27510 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
27520 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
27530 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
27540 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
27550 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
27560 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
27570 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27580 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
27590 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
275a0 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20  de: IdxGT P1 P2 
275b0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
275c0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
275d0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
275e0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
275f0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
27600 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
27610 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
27620 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
27630 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f  PRIMARY KEY.  Co
27640 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
27650 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
27660 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
27670 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
27680 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
27690 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
276a0 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a  Y KEY or ROWID .
276b0 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  ** fields at the
276c0 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   end..**.** If t
276d0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
276e0 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
276f0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  n the key value.
27700 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
27710 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
27720 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
27730 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
27740 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
27750 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50  e: IdxLT P1 P2 P
27760 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
27770 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
27780 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
27790 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
277a0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
277b0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
277c0 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
277d0 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
277e0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
277f0 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
27800 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
27810 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
27820 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
27830 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
27840 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
27850 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
27860 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
27870 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
27880 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
27890 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
278a0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
278b0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
278c0 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
278d0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
278e0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
278f0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
27900 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50  e: IdxLE P1 P2 P
27910 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
27920 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
27930 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
27940 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
27950 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
27960 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
27970 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
27980 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
27990 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
279a0 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
279b0 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
279c0 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
279d0 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
279e0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
279f0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
27a00 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
27a10 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
27a20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
27a30 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
27a40 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
27a50 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
27a60 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
27a70 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  n jump.** to P2.
27a80 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
27a90 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
27aa0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
27ab0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
27ac0 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  E:          /* j
27ad0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
27ae0 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxGT:          /
27af0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
27b00 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20  P_IdxLT:        
27b10 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
27b20 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20  e OP_IdxGE:  {  
27b30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
27b40 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27b50 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
27b60 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
27b70 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
27b80 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27b90 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
27ba0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
27bb0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
27bc0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
27bd0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
27be0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
27bf0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
27c00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27c10 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
27c20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27c30 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
27c40 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73  p->p5==1 );.  as
27c50 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
27c60 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
27c70 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
27c80 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
27c90 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
27ca0 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70  p->p4.i;.  if( p
27cb0 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64  Op->opcode<OP_Id
27cc0 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72  xLT ){.    asser
27cd0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
27ce0 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
27cf0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
27d00 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
27d10 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65  lt_rc = -1;.  }e
27d20 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
27d30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
27d40 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
27d50 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
27d60 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  );.    r.default
27d70 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  _rc = 0;.  }.  r
27d80 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
27d90 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
27da0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
27db0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
27dc0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
27dd0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
27de0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
27df0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65  ); }.#endif.  re
27e00 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  s = 0;  /* Not n
27e10 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
27e20 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
27e30 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
27e40 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
27e50 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70  KeyCompare(db, p
27e60 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20  C, &r, &res);.  
27e70 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c  assert( (OP_IdxL
27e80 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26  E&1)==(OP_IdxLT&
27e90 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26  1) && (OP_IdxGE&
27ea0 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29  1)==(OP_IdxGT&1)
27eb0 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e   );.  if( (pOp->
27ec0 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49  opcode&1)==(OP_I
27ed0 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61  dxLT&1) ){.    a
27ee0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
27ef0 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
27f00 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27f10 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxLT );.    res
27f20 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65   = -res;.  }else
27f30 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
27f40 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
27f50 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
27f60 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
27f70 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20      res++;.  }. 
27f80 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
27f90 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28  (res>0,2);.  if(
27fa0 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 70 63   res>0 ){.    pc
27fb0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b   = pOp->p2 - 1 ;
27fc0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
27fd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
27fe0 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
27ff0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
28000 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
28010 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28020 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
28030 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
28040 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
28050 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
28060 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
28070 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
28080 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
28090 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
280a0 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
280b0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
280c0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
280d0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
280e0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
280f0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
28100 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
28110 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
28120 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
28130 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
28140 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
28150 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
28160 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
28170 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
28180 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
28190 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
281a0 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
281b0 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
281c0 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
281d0 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
281e0 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
281f0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
28200 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
28210 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
28220 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
28230 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
28240 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
28250 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
28260 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
28270 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20   If no page .** 
28280 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
28290 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
282a0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
282b0 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61  ropped was alrea
282c0 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20  dy .** the last 
282d0 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
282e0 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f  ase) then a zero
282f0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
28300 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66  gister P2..** If
28310 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64   AUTOVACUUM is d
28320 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a  isabled then a z
28330 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
28340 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
28350 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
28360 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
28370 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
28380 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
28390 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
283a0 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20  ;.  int iCnt;.  
283b0 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69  Vdbe *pVdbe;.  i
283c0 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72  nt iDb;..  asser
283d0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
283e0 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  0 );.#ifndef SQL
283f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
28400 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30  TABLE.  iCnt = 0
28410 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
28420 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
28430 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70  pVdbe = pVdbe->p
28440 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
28450 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
28460 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
28470 56 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72 20  Vdbe->bIsReader 
28480 0a 20 20 20 20 20 26 26 20 70 56 64 62 65 2d 3e  .     && pVdbe->
28490 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26  inVtabMethod<2 &
284a0 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a  & pVdbe->pc>=0 .
284b0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43 6e      ){.      iCn
284c0 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  t++;.    }.  }.#
284d0 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62  else.  iCnt = db
284e0 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65 6e  ->nVdbeRead;.#en
284f0 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  dif.  pOut->flag
28500 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
28510 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20  if( iCnt>1 ){.  
28520 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
28530 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72  CKED;.    p->err
28540 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62  orAction = OE_Ab
28550 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ort;.  }else{.  
28560 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
28570 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e  .    assert( iCn
28580 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  t==1 );.    asse
28590 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
285a0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
285b0 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
285c0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
285d0 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
285e0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
285f0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
28600 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
28610 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
28620 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
28630 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
28640 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
28650 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
28660 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
28670 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
28680 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
28690 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
286a0 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
286b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
286c0 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
286d0 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
286e0 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
286f0 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
28700 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
28710 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
28720 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
28730 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
28740 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
28750 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
28760 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
28770 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
28780 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
28790 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
287a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
287b0 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
287c0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
287d0 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
287e0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
287f0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
28800 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
28810 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
28820 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
28830 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
28840 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
28850 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
28860 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
28870 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
28880 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
28890 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
288a0 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
288b0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
288c0 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
288d0 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
288e0 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
288f0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
28900 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
28910 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
28920 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
28930 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
28940 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
28950 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
28960 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
28970 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
28980 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
28990 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
289a0 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
289b0 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
289c0 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
289d0 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
289e0 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
289f0 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
28a00 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
28a10 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
28a20 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
28a30 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
28a40 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
28a50 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
28a60 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
28a70 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
28a80 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
28a90 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
28aa0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
28ab0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
28ac0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
28ad0 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
28ae0 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
28af0 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
28b00 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
28b10 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
28b20 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
28b30 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
28b40 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
28b50 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20  ->p2) );.  rc = 
28b60 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
28b70 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
28b80 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
28b90 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
28ba0 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
28bb0 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
28bc0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
28bd0 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
28be0 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
28bf0 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
28c00 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
28c10 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
28c20 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
28c30 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
28c40 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
28c50 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
28c60 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
28c70 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
28c80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28c90 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72  Opcode: ResetSor
28ca0 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ter P1 * * * *.*
28cb0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
28cc0 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68  contents from th
28cd0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
28ce0 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74  e or sorter.** t
28cf0 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63  hat is open on c
28d00 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ursor P1..**.** 
28d10 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79  This opcode only
28d20 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f   works for curso
28d30 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74  rs used for sort
28d40 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65  ing and.** opene
28d50 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70  d with OP_OpenEp
28d60 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f  hemeral or OP_So
28d70 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73  rterOpen..*/.cas
28d80 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72  e OP_ResetSorter
28d90 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
28da0 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74   *pC;. .  assert
28db0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28dc0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28dd0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28de0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28df0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28e00 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 53 6f  );.  if( pC->pSo
28e10 72 74 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rter ){.    sqli
28e20 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73  te3VdbeSorterRes
28e30 65 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74  et(db, pC->pSort
28e40 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  er);.  }else{.  
28e50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
28e60 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20  Ephemeral );.   
28e70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
28e80 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75  eeClearTableOfCu
28e90 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72  rsor(pC->pCursor
28ea0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
28eb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  }../* Opcode: Cr
28ec0 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20  eateTable P1 P2 
28ed0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
28ee0 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
28ef0 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  b=P1.**.** Alloc
28f00 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
28f10 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
28f20 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
28f30 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
28f40 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
28f50 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
28f60 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
28f70 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
28f80 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
28f90 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
28fa0 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
28fb0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
28fc0 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54  ister P2.**.** T
28fd0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
28fe0 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e  tween a table an
28ff0 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68  d an index is th
29000 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73  is:  A table mus
29010 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79  t.** have a 4-by
29020 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61  te integer key a
29030 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69  nd can have arbi
29040 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20  trary data.  An 
29050 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20  index.** has an 
29060 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75  arbitrary key bu
29070 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  t no data..**.**
29080 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74   See also: Creat
29090 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  eIndex.*/./* Opc
290a0 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78  ode: CreateIndex
290b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
290c0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
290d0 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a  root iDb=P1.**.*
290e0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
290f0 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
29100 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
29110 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
29120 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
29130 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
29140 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
29150 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
29160 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
29170 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
29180 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
29190 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
291a0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
291b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
291c0 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
291d0 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
291e0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
291f0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
29200 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
29210 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
29220 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
29230 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
29240 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
29250 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
29260 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
29270 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
29280 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
29290 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
292a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
292b0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
292c0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
292d0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
292e0 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
292f0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
29300 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
29310 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
29320 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29330 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
29340 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
29350 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
29360 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
29370 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
29380 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
29390 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a  = BTREE_INTKEY;.
293a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61    }else{.    fla
293b0 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gs = BTREE_BLOBK
293c0 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  EY;.  }.  rc = s
293d0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
293e0 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
293f0 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
29400 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
29410 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
29420 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
29430 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
29440 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
29450 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
29460 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
29470 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
29480 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
29490 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
294a0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
294b0 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4. .**.** This o
294c0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
294d0 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
294e0 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
294f0 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
29500 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
29510 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
29520 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
29530 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
29540 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
29550 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
29560 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
29570 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
29580 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
29590 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
295a0 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
295b0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
295c0 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
295d0 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
295e0 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
295f0 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
29600 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
29610 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
29620 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
29630 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
29640 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
29650 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
29660 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
29670 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
29680 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
29690 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
296a0 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
296b0 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
296c0 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
296d0 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
296e0 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
296f0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
29700 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
29710 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
29720 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
29730 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65  .  /* Used to be
29740 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a   a conditional *
29750 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20  / {.    zMaster 
29760 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
29770 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  Db);.    initDat
29780 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
29790 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
297a0 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
297b0 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
297c0 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
297d0 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
297e0 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
297f0 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
29800 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
29810 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
29820 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
29830 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
29840 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a  Db[iDb].zName, z
29850 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
29860 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
29870 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
29880 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
29890 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
298a0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
298b0 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
298c0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
298d0 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
298e0 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
298f0 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
29900 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
29910 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
29920 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
29930 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
29940 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
29950 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
29960 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
29970 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
29980 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
29990 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
299a0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
299b0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
299c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
299d0 28 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65  ( rc ) sqlite3Re
299e0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
299f0 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
29a00 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
29a10 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
29a20 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
29a30 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
29a40 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
29a50 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
29a60 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
29a70 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
29a80 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
29a90 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
29aa0 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
29ab0 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
29ac0 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
29ad0 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
29ae0 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
29af0 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
29b00 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
29b10 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
29b20 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
29b30 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
29b40 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
29b50 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
29b60 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
29b70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
29b80 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
29b90 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
29ba0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
29bb0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
29bc0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
29bd0 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
29be0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
29bf0 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
29c00 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
29c10 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
29c20 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
29c30 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
29c40 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
29c50 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
29c60 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
29c70 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
29c80 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
29c90 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
29ca0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
29cb0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
29cc0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
29cd0 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
29ce0 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
29cf0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
29d00 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
29d10 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
29d20 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
29d30 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
29d40 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
29d50 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
29d60 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
29d70 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
29d80 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
29d90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
29da0 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
29db0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
29dc0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
29dd0 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
29de0 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
29df0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
29e00 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
29e10 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
29e20 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
29e30 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
29e40 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
29e50 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
29e60 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a  estroy opcode).*
29e70 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  * in order to ke
29e80 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
29e90 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
29ea0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
29eb0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
29ec0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
29ed0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
29ee0 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
29ef0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
29f00 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
29f10 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
29f20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
29f30 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
29f40 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
29f50 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
29f60 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
29f70 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
29f80 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
29f90 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
29fa0 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
29fb0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
29fc0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
29fd0 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
29fe0 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
29ff0 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2a000 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
2a010 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
2a020 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
2a030 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2a040 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2a050 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2a060 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2a070 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2a080 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
2a090 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2a0a0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
2a0b0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2a0c0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2a0d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a0e0 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2a0f0 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
2a100 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
2a110 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
2a120 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
2a130 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
2a140 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
2a150 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
2a160 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
2a170 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
2a180 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
2a190 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
2a1a0 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
2a1b0 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
2a1c0 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
2a1d0 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
2a1e0 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
2a1f0 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
2a200 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
2a210 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
2a220 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
2a230 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
2a240 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
2a250 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2a260 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
2a270 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
2a280 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
2a290 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
2a2a0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
2a2b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
2a2c0 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
2a2d0 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
2a2e0 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
2a2f0 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
2a300 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
2a310 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
2a320 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
2a330 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
2a340 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
2a350 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
2a360 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
2a370 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
2a380 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
2a390 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
2a3a0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
2a3b0 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
2a3c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2a3d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a3e0 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
2a3f0 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
2a400 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
2a410 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
2a420 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
2a430 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
2a440 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
2a450 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
2a460 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
2a470 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
2a480 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
2a490 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
2a4a0 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
2a4b0 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
2a4c0 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
2a4d0 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
2a4e0 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
2a4f0 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
2a500 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2a510 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
2a520 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
2a530 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
2a540 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
2a550 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
2a560 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
2a570 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
2a580 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
2a590 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
2a5a0 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
2a5b0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
2a5c0 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
2a5d0 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
2a5e0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
2a5f0 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
2a600 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
2a610 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
2a620 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
2a630 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2a640 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2a650 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2a660 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65  ;.  pnErr = &aMe
2a670 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2a680 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
2a690 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
2a6a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
2a6b0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28  pnErr->flags & (
2a6c0 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
2a6d0 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  ))==0 );.  pIn1 
2a6e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2a6f0 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e  ;.  for(j=0; j<n
2a700 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  Root; j++){.    
2a710 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29  aRoot[j] = (int)
2a720 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
2a730 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20  lue(&pIn1[j]);. 
2a740 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20   }.  aRoot[j] = 
2a750 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2a760 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
2a770 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2a780 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2a790 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20  k, pOp->p5) );. 
2a7a0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
2a7b0 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
2a7c0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
2a7d0 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
2a7e0 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
2a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a800 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
2a810 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
2a820 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2a830 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
2a840 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
2a850 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2a860 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
2a870 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
2a880 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
2a890 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
2a8a0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
2a8b0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
2a8c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2a8d0 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
2a8e0 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
2a8f0 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
2a900 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
2a910 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
2a920 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
2a930 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2a940 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
2a950 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2a960 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2a970 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2a980 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
2a990 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
2a9a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2a9b0 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29  sis:  rowset(P1)
2a9c0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73  =r[P2].**.** Ins
2a9d0 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
2a9e0 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
2a9f0 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
2aa00 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a   boolean index.*
2aa10 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
2aa20 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
2aa30 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
2aa40 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
2aa50 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2aa60 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
2aa70 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69         /* in1, i
2aa80 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n2 */.  pIn1 = &
2aa90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2aaa0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2aab0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
2aac0 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
2aad0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
2aae0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2aaf0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2ab00 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
2ab10 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
2ab20 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
2ab30 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2ab40 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2ab50 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
2ab60 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53   }.  sqlite3RowS
2ab70 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
2ab80 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e  .pRowSet, pIn2->
2ab90 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
2aba0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2abb0 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33  SetRead P1 P2 P3
2abc0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2abd0 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28  :  r[P3]=rowset(
2abe0 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  P1).**.** Extrac
2abf0 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
2ac00 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
2ac10 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
2ac20 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
2ac30 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2ac40 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
2ac50 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
2ac60 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
2ac70 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
2ac80 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
2ac90 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2aca0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2acb0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
2acc0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
2acd0 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
2ace0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2acf0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
2ad00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2ad10 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2ad20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
2ad30 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75  wSetNext(pIn1->u
2ad40 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d  .pRowSet, &val)=
2ad50 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =0.  ){.    /* T
2ad60 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  he boolean index
2ad70 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20   is empty */.   
2ad80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ad90 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2ada0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2adb0 20 31 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   1;.    VdbeBran
2adc0 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
2add0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
2ade0 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
2adf0 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
2ae00 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
2ae10 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2ae20 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
2ae30 6c 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  l);.    VdbeBran
2ae40 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20  chTaken(0,2);.  
2ae50 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
2ae60 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
2ae70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2ae80 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
2ae90 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
2aea0 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73  if r[P3] in rows
2aeb0 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a  et(P1) goto P2.*
2aec0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
2aed0 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
2aee0 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74  old a 64-bit int
2aef0 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72  eger value. If r
2af00 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f  egister P1.** co
2af10 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20  ntains a RowSet 
2af20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20  object and that 
2af30 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f  RowSet object co
2af40 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61  ntains.** the va
2af50 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20  lue held in P3, 
2af60 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72  jump to register
2af70 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2af80 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e  insert the.** in
2af90 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f  teger in P3 into
2afa0 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20   the RowSet and 
2afb0 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74  continue on to t
2afc0 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64  he.** next opcod
2afd0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77  e..**.** The Row
2afe0 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70  Set object is op
2aff0 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20  timized for the 
2b000 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65  case where succe
2b010 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66  ssive sets.** of
2b020 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65   integers, where
2b030 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69   each set contai
2b040 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73  ns no duplicates
2b050 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66  . Each set.** of
2b060 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74   values is ident
2b070 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
2b080 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
2b090 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
2b0a0 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
2b0b0 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d  e final set P4=-
2b0c0 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65  1.  P4 must be e
2b0d0 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e  ither -1 or.** n
2b0e0 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f  on-negative.  Fo
2b0f0 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  r non-negative v
2b100 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79  alues of P4 only
2b110 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20   the lower 4.** 
2b120 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69  bits are signifi
2b130 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  cant..**.** This
2b140 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
2b150 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
2b160 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
2b170 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
2b180 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a  * the rowset obj
2b190 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
2b1a0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
2b1b0 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
2b1c0 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
2b1d0 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
2b1e0 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
2b1f0 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
2b200 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
2b210 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
2b220 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
2b230 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
2b240 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
2b250 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
2b260 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
2b270 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
2b280 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
2b290 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
2b2a0 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
2b2b0 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
2b2c0 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
2b2d0 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
2b2e0 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
2b2f0 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
2b300 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
2b310 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
2b320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2b330 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
2b340 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
2b350 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
2b360 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b370 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
2b380 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
2b390 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
2b3a0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
2b3b0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b3c0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
2b3d0 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
2b3e0 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
2b3f0 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
2b400 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
2b410 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
2b420 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
2b430 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
2b440 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
2b450 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2b460 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
2b470 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2b480 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
2b490 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
2b4a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2b4b0 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
2b4c0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
2b4d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2b4e0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2b4f0 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
2b500 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
2b510 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
2b520 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
2b530 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
2b540 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69  n1->u.pRowSet, i
2b550 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
2b560 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b570 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
2b580 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
2b590 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
2b5a0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2b5b0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
2b5c0 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
2b5d0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
2b5e0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2b5f0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2b600 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
2b610 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
2b620 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2b630 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
2b640 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
2b650 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2b660 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
2b670 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
2b680 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
2b690 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
2b6a0 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
2b6b0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
2b6c0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2b6d0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
2b6e0 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
2b6f0 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
2b700 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
2b710 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
2b720 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
2b730 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
2b740 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2b750 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
2b760 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
2b770 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
2b780 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
2b790 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
2b7a0 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
2b7b0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
2b7c0 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
2b7d0 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
2b7e0 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
2b7f0 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
2b800 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
2b810 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
2b820 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
2b830 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
2b840 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
2b850 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2b860 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
2b870 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2b880 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ram..**.** If P5
2b890 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2b8a0 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f  en recursive pro
2b8b0 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20  gram invocation 
2b8c0 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63  is enabled..*/.c
2b8d0 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
2b8e0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2b8f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
2b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b910 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
2b920 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
2b930 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
2b940 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
2b950 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
2b960 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
2b970 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
2b980 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
2b990 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
2b9a0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
2b9b0 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
2b9c0 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
2b9d0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2b9f0 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
2ba00 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
2ba10 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
2ba20 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
2ba30 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
2ba40 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
2ba50 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
2ba60 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
2ba70 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
2ba80 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
2ba90 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
2baa0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
2bab0 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
2bac0 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
2bad0 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
2bae0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
2baf0 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
2bb00 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
2bb10 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
2bb20 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
2bb30 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2bb40 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2bb50 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Op>0 );.  .  /* 
2bb60 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69  If the p5 flag i
2bb70 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
2bb80 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
2bb90 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69  on of triggers i
2bba0 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
2bbb0 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
2bbc0 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35  ompatibility (p5
2bbd0 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20   is set if this 
2bbe0 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a  sub-program.  **
2bbf0 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69   is really a tri
2bc00 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65  gger, not a fore
2bc10 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20  ign key action, 
2bc20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74  and the flag set
2bc30 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65  .  ** and cleare
2bc40 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41  d by the "PRAGMA
2bc50 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67   recursive_trigg
2bc60 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ers" command is 
2bc70 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20  clear)..  ** .  
2bc80 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69  ** It is recursi
2bc90 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2bca0 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68   triggers, at th
2bcb0 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61  e SQL level, tha
2bcc0 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  t is .  ** disab
2bcd0 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73  led. In some cas
2bce0 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  es a single trig
2bcf0 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65  ger may generate
2bd00 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a   more than one .
2bd10 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20    ** SubProgram 
2bd20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20  (if the trigger 
2bd30 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
2bd40 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f  with more than o
2bd50 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20  ne different .  
2bd60 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  ** ON CONFLICT a
2bd70 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72  lgorithm). SubPr
2bd80 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73  ogram structures
2bd90 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2bda0 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74   a.  ** single t
2bdb0 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20  rigger all have 
2bdc0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
2bdd0 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61  or the SubProgra
2bde0 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61  m.token .  ** va
2bdf0 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66  riable.  */.  if
2be00 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
2be10 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74   t = pProgram->t
2be20 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46  oken;.    for(pF
2be30 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
2be40 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65  pFrame && pFrame
2be50 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61  ->token!=t; pFra
2be60 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2be70 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72  nt);.    if( pFr
2be80 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  ame ) break;.  }
2be90 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d  ..  if( p->nFram
2bea0 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  e>=db->aLimit[SQ
2beb0 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
2bec0 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20  ER_DEPTH] ){.   
2bed0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
2bee0 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  OR;.    sqlite3S
2bef0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2bf00 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d  rMsg, db, "too m
2bf10 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
2bf20 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
2bf30 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2bf40 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
2bf50 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
2bf60 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
2bf70 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
2bf80 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
2bf90 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2bfa0 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
2bfb0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2bfc0 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
2bfd0 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
2bfe0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
2bff0 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
2c000 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
2c010 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
2c020 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
2c030 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
2c040 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
2c050 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
2c060 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
2c070 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
2c080 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
2c090 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
2c0a0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
2c0b0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
2c0c0 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
2c0d0 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
2c0e0 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
2c0f0 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
2c100 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
2c110 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
2c120 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
2c130 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
2c140 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
2c150 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
2c160 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
2c170 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
2c180 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
2c190 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
2c1a0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
2c1b0 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
2c1c0 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
2c1d0 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d  Csr;.    nByte =
2c1e0 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
2c1f0 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20  dbeFrame)).     
2c200 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20           + nMem 
2c210 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20  * sizeof(Mem).  
2c220 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
2c230 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73  rogram->nCsr * s
2c240 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2c250 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   *).            
2c260 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f    + pProgram->nO
2c270 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29  nce * sizeof(u8)
2c280 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
2c290 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
2c2a0 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
2c2b0 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
2c2c0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2c2d0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
2c2e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2c2f0 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
2c300 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
2c310 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
2c320 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
2c330 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
2c340 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
2c350 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
2c360 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2c370 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
2c380 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2c390 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63   pFrame->pc = pc
2c3a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
2c3b0 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
2c3c0 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
2c3d0 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
2c3e0 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
2c3f0 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
2c400 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
2c410 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
2c420 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
2c430 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2c440 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
2c450 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
2c460 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2c470 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  n;.    pFrame->a
2c480 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f  OnceFlag = p->aO
2c490 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72  nceFlag;.    pFr
2c4a0 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d  ame->nOnceFlag =
2c4b0 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23   p->nOnceFlag;.#
2c4c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2c4d0 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2c4e0 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
2c4f0 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
2c500 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ec;.#endif..    
2c510 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
2c520 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
2c530 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
2c540 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
2c550 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2c560 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
2c570 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
2c580 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
2c590 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
2c5a0 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
2c5b0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2c5c0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
2c5d0 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
2c5e0 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2c5f0 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
2c600 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2c610 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20  ChildMem );.    
2c620 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2c630 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2c640 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20  nChildCsr );.   
2c650 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72   assert( pc==pFr
2c660 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a  ame->pc );.  }..
2c670 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20    p->nFrame++;. 
2c680 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2c690 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2c6a0 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69  pFrame->lastRowi
2c6b0 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
2c6c0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
2c6d0 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
2c6e0 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e   pFrame->nDbChan
2c6f0 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61  ge = p->db->nCha
2c700 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
2c710 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
2c720 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
2c730 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
2c740 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
2c750 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e  rame)[-1];.  p->
2c760 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2c770 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2c780 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2c790 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2c7a0 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2c7b0 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2c7c0 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20  em[p->nMem+1];. 
2c7d0 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
2c7e0 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
2c7f0 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
2c800 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f  am->nOp;.  p->aO
2c810 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29  nceFlag = (u8 *)
2c820 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75  &p->apCsr[p->nCu
2c830 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63  rsor];.  p->nOnc
2c840 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d  eFlag = pProgram
2c850 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20  ->nOnce;.#ifdef 
2c860 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2c870 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
2c880 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23  p->anExec = 0;.#
2c890 65 6e 64 69 66 0a 20 20 70 63 20 3d 20 2d 31 3b  endif.  pc = -1;
2c8a0 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e  .  memset(p->aOn
2c8b0 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f  ceFlag, 0, p->nO
2c8c0 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65  nceFlag);..  bre
2c8d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c8e0 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
2c8f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2c900 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
2c910 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
2c920 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
2c930 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
2c940 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2c950 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
2c960 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
2c970 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
2c980 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
2c990 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
2c9a0 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
2c9b0 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
2c9c0 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
2c9d0 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
2c9e0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
2c9f0 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
2ca00 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
2ca10 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
2ca20 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
2ca30 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
2ca40 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
2ca50 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
2ca60 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
2ca70 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
2ca80 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2ca90 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2caa0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2cab0 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
2cac0 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
2cad0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2cae0 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
2caf0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
2cb00 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2cb10 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2cb20 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
2cb30 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
2cb40 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
2cb50 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2cb60 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
2cb70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
2cb80 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
2cb90 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
2cba0 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
2cbb0 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
2cbc0 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
2cbd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cbe0 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
2cbf0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cc00 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
2cc10 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
2cc20 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
2cc30 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
2cc40 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
2cc50 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
2cc60 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
2cc70 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
2cc80 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
2cc90 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
2cca0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2ccb0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2ccc0 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
2ccd0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
2cce0 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
2ccf0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2cd00 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
2cd10 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
2cd20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
2cd30 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2cd40 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
2cd50 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
2cd60 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
2cd70 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
2cd80 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
2cd90 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
2cda0 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
2cdb0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2cdc0 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
2cdd0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
2cde0 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
2cdf0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
2ce00 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2ce10 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
2ce20 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
2ce30 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2ce40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
2ce50 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
2ce60 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ce70 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
2ce80 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2ce90 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
2cea0 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
2ceb0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2cec0 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
2ced0 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
2cee0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2cef0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
2cf00 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
2cf10 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
2cf20 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
2cf30 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
2cf40 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
2cf50 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2cf60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2cf70 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2cf80 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
2cf90 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
2cfa0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
2cfb0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2cfc0 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
2cfd0 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
2cfe0 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
2cff0 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
2d000 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
2d010 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
2d020 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2d030 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2d040 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2d050 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
2d060 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2d070 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
2d080 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2d090 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
2d0a0 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
2d0b0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2d0c0 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
2d0d0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2d0e0 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
2d0f0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
2d100 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
2d110 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
2d120 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2d130 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2d140 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2d150 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
2d160 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  );.    if( p->nF
2d170 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2d180 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2d190 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2d1a0 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
2d1b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2d1c0 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2d1d0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2d1e0 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
2d1f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2d200 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
2d210 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
2d220 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2d230 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
2d240 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
2d250 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
2d260 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
2d270 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
2d280 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
2d290 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
2d2a0 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
2d2b0 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
2d2c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
2d2d0 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
2d2e0 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
2d2f0 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
2d300 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2d310 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
2d320 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
2d330 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
2d340 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
2d350 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2d360 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2d370 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
2d380 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
2d390 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
2d3a0 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
2d3b0 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2d3c0 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
2d3d0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2d3e0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2d3f0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
2d400 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
2d410 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2d420 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
2d430 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2d440 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
2d450 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2d460 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
2d470 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
2d480 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d490 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
2d4a0 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
2d4b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d4c0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
2d4d0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2d4e0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
2d4f0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2d500 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
2d510 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
2d520 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
2d530 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
2d540 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
2d550 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2d560 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2d570 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
2d580 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
2d590 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2d5a0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
2d5b0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2d5c0 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
2d5d0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2d5e0 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  r..** If the val
2d5f0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2d600 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
2d610 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e  r, jump to P2 an
2d620 64 0a 2a 2a 20 61 64 64 20 74 68 65 20 6c 69 74  d.** add the lit
2d630 65 72 61 6c 20 76 61 6c 75 65 20 50 33 20 74 6f  eral value P3 to
2d640 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2d650 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69  .** If the initi
2d660 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  al value of regi
2d670 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2d680 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65  than 1, then the
2d690 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63  .** value is unc
2d6a0 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72  hanged and contr
2d6b0 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67  ol passes throug
2d6c0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2d6d0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2d6e0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
2d6f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2d700 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2d710 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2d720 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2d730 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2d740 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2d750 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20  n( pIn1->u.i>0, 
2d760 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2d770 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
2d780 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2d790 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d7a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
2d7b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2d7c0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2d7d0 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d 3c 30  +=P3, if r[P1]<0
2d7e0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2d7f0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2d800 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2d810 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
2d820 20 50 33 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P3 to the value
2d830 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
2d840 50 31 20 74 68 65 6e 20 69 66 20 74 68 65 20 76  P1 then if the v
2d850 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2d860 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
2d870 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50   zero, jump to P
2d880 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  2. .*/.case OP_I
2d890 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f  fNeg: {        /
2d8a0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2d8b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2d8c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2d8d0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2d8e0 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d  M_Int );.  pIn1-
2d8f0 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b  >u.i += pOp->p3;
2d900 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2d910 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20  en(pIn1->u.i<0, 
2d920 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2d930 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i<0 ){.     pc
2d940 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2d950 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d960 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
2d970 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20  Zero P1 P2 P3 * 
2d980 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2d990 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
2d9a0 72 5b 50 31 5d 2b 3d 50 33 2c 20 67 6f 74 6f 20  r[P1]+=P3, goto 
2d9b0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2d9c0 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2d9d0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
2d9e0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
2d9f0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
2da00 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e  ** initially non
2da10 7a 65 72 6f 2c 20 74 68 65 6e 20 61 64 64 20 50  zero, then add P
2da20 33 20 74 6f 20 50 31 20 61 6e 64 20 6a 75 6d 70  3 to P1 and jump
2da30 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69   to P2.  If regi
2da40 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e  ster P1 is.** in
2da50 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
2da60 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
2da70 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
2da80 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
2da90 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
2daa0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2dab0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2dac0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2dad0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2dae0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
2daf0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2db00 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
2db10 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
2db20 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  {.     pIn1->u.i
2db30 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   += pOp->p3;.   
2db40 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2db50 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2db60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2db70 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
2db80 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2db90 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
2dba0 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
2dbb0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2dbc0 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
2dbd0 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
2dbe0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2dbf0 69 73 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e  ister P1.** then
2dc00 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
2dc10 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
2dc20 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
2dc30 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
2dc40 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
2dc50 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2dc60 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2dc70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2dc80 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2dc90 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  _Int );.  pIn1->
2dca0 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61  u.i--;.  VdbeBra
2dcb0 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2dcc0 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
2dcd0 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b   pIn1->u.i==0 ){
2dce0 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2dcf0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2dd00 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
2dd10 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e 63 72  de: JumpZeroIncr
2dd20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2dd30 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 72 5b  Synopsis: if (r[
2dd40 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f  P1]++)==0 ) goto
2dd50 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65   P2.**.** The re
2dd60 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
2dd70 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2dd80 72 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20  r.  If register 
2dd90 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 0a  P1 is initially.
2dda0 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ** zero, then ju
2ddb0 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e 63 72 65  mp to P2.  Incre
2ddc0 6d 65 6e 74 20 72 65 67 69 73 74 65 72 20 50 31  ment register P1
2ddd0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2dde0 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74  hether or.** not
2ddf0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2de00 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  en..*/.case OP_J
2de10 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b 20 20  umpZeroIncr: {  
2de20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2de30 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2de40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2de50 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2de60 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2de70 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2de80 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20  n(pIn1->u.i==0, 
2de90 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
2dea0 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20  >u.i++)==0 ){.  
2deb0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2dec0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2ded0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2dee0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2def0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2df00 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2df10 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2df20 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2df30 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2df40 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2df50 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2df60 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2df70 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2df80 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2df90 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2dfa0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2dfb0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2dfc0 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2dfd0 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2dfe0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2dff0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2e000 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2e010 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2e020 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2e030 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2e040 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
2e050 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
2e060 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
2e070 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73 71 6c 69  .  Mem t;.  sqli
2e080 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
2e090 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2e0a0 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
2e0b0 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
2e0c0 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
2e0d0 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ec = &aMem[pOp->
2e0e0 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
2e0f0 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
2e100 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
2e110 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
2e120 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
2e130 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
2e140 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
2e150 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
2e160 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62   pRec;.    memAb
2e170 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2e180 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e  Rec);.  }.  ctx.
2e190 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
2e1a0 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  pFunc;.  assert(
2e1b0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2e1c0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
2e1d0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2e1e0 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d   ctx.pMem = pMem
2e1f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2e200 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  ];.  pMem->n++;.
2e210 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e220 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d  Init(&t, db, MEM
2e230 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 70 4f  _Null);.  ctx.pO
2e240 75 74 20 3d 20 26 74 3b 0a 20 20 63 74 78 2e 69  ut = &t;.  ctx.i
2e250 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74  sError = 0;.  ct
2e260 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 63  x.pVdbe = p;.  c
2e270 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63  tx.iOp = pc;.  c
2e280 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  tx.skipFlag = 0;
2e290 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78  .  (ctx.pFunc->x
2e2a0 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61  Step)(&ctx, n, a
2e2b0 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  pVal); /* IMP: R
2e2c0 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
2e2d0 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
2e2e0 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
2e2f0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2e300 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2e310 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2e320 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 72 63  ext(&t));.    rc
2e330 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
2e340 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b    }.  if( ctx.sk
2e350 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73  ipFlag ){.    as
2e360 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
2e370 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
2e380 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b   );.    i = pOp[
2e390 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20  -1].p1;.    if( 
2e3a0 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  i ) sqlite3VdbeM
2e3b0 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2e3c0 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 73  [i], 1);.  }.  s
2e3d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2e3e0 65 61 73 65 28 26 74 29 3b 0a 20 20 62 72 65 61  ease(&t);.  brea
2e3f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2e400 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
2e410 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
2e420 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20  is: accum=r[P1] 
2e430 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  N=P2.**.** Execu
2e440 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
2e450 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2e460 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20   aggregate.  P1 
2e470 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79  is.** the memory
2e480 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
2e490 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2e4a0 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  r for the aggreg
2e4b0 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ate..**.** P2 is
2e4c0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
2e4d0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
2e4e0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2e4f0 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
2e500 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2e510 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
2e520 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
2e530 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
2e540 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
2e550 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
2e560 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
2e570 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
2e580 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
2e590 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
2e5a0 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
2e5b0 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
2e5c0 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
2e5d0 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
2e5e0 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20   the degenerate 
2e5f0 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
2e600 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2e610 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
2e620 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
2e630 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20  se OP_AggFinal: 
2e640 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
2e650 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2e660 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
2e670 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
2e680 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  or) );.  pMem = 
2e690 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2e6a0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
2e6b0 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
2e6c0 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
2e6d0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2e6e0 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
2e6f0 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
2e700 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
2e710 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2e720 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2e730 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2e740 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2e750 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
2e760 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2e770 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
2e780 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
2e790 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2e7a0 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
2e7b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
2e7c0 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
2e7d0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
2e7e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2e7f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e800 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
2e810 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
2e820 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2e830 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
2e840 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
2e850 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
2e860 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
2e870 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
2e880 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
2e890 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
2e8a0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
2e8b0 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52   FULL,.** RESTAR
2e8c0 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20  T, or TRUNCATE. 
2e8d0 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
2e8e0 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
2e8f0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
2e900 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
2e910 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
2e920 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
2e930 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2e940 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
2e950 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
2e960 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
2e970 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
2e980 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
2e990 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
2e9a0 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
2e9b0 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
2e9c0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
2e9d0 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
2e9e0 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
2e9f0 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
2ea00 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
2ea10 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
2ea20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
2ea30 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
2ea40 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
2ea50 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
2ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ea70 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2ea80 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaa0 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
2eab0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ead0 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
2eae0 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
2eaf0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2eb00 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
2eb10 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
2eb20 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
2eb30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2eb40 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2eb50 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
2eb60 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2eb70 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2eb80 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
2eb90 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
2eba0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
2ebb0 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20  START.       || 
2ebc0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2ebd0 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
2ebe0 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ATE.  );.  rc = 
2ebf0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2ec00 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
2ec10 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
2ec20 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
2ec30 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
2ec40 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
2ec50 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
2ec60 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
2ec70 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
2ec80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2ec90 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
2eca0 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
2ecb0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
2ecc0 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
2ecd0 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
2ece0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
2ecf0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ed00 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
2ed10 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
2ed20 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
2ed30 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
2ed40 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2ed50 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
2ed60 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
2ed70 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
2ed80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ed90 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
2eda0 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
2edb0 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
2edc0 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
2edd0 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
2ede0 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
2edf0 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
2ee00 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
2ee10 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
2ee20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
2ee30 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
2ee40 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
2ee50 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
2ee60 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
2ee70 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
2ee80 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
2ee90 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
2eea0 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
2eeb0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2eec0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
2eed0 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
2eee0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2eef0 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
2ef00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ef10 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
2ef20 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
2ef30 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
2ef40 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ef60 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
2ef70 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
2ef80 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
2ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efa0 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
2efb0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
2efc0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2efd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2efe0 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
2eff0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
2f000 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f  TE_OMIT_WAL.  co
2f010 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
2f020 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
2f030 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
2f040 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
2f050 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65  r */.#endif..  e
2f060 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  New = pOp->p3;. 
2f070 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50   assert( eNew==P
2f080 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f090 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20  _DELETE .       
2f0a0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2f0b0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2f0c0 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ATE .       || e
2f0d0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f0e0 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a  ALMODE_PERSIST .
2f0f0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2f100 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2f110 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20  E_OFF.       || 
2f120 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2f130 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20  NALMODE_MEMORY. 
2f140 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2f150 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f160 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65  _WAL.       || e
2f170 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f180 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29  ALMODE_QUERY.  )
2f190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f1a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2f1b0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
2f1c0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2f1d0 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20  ly==0 );..  pBt 
2f1e0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2f1f0 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
2f200 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2f210 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c  ager(pBt);.  eOl
2f220 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  d = sqlite3Pager
2f230 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  GetJournalMode(p
2f240 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e  Pager);.  if( eN
2f250 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f260 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e  LMODE_QUERY ) eN
2f270 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28  ew = eOld;.  if(
2f280 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b   !sqlite3PagerOk
2f290 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d  ToChangeJournalM
2f2a0 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e  ode(pPager) ) eN
2f2b0 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e  ew = eOld;..#ifn
2f2c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f2d0 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
2f2e0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
2f2f0 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31  lename(pPager, 1
2f300 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2f310 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2f320 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2f330 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2f340 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2f350 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2f360 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2f370 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2f380 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2f390 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2f3a0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f3b0 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69  _WAL.   && (sqli
2f3c0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
2f3d0 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20  ename)==0       
2f3e0 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2f3f0 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2f400 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2f410 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2f420 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2f430 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2f440 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2f450 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2f460 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2f470 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2f480 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2f490 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2f4a0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2f4b0 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2f4c0 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2f4d0 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
2f4e0 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  >1 ){.      rc =
2f4f0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2f500 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2f510 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f520 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
2f530 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65    "cannot change
2f540 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f   %s wal mode fro
2f550 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
2f560 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20  action",.       
2f570 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f     (eNew==PAGER_
2f580 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2f590 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20  ? "into" : "out 
2f5a0 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  of").      );.  
2f5b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2f5c0 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
2f5d0 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
2f5e0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
2f5f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
2f600 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
2f610 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
2f620 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
2f630 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
2f640 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
2f650 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
2f660 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
2f670 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
2f680 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
2f690 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
2f6a0 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
2f6b0 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
2f6c0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f6d0 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
2f6e0 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
2f6f0 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
2f700 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
2f710 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
2f720 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a  oseWal(pPager);.
2f730 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
2f740 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f750 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2f760 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2f770 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
2f780 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2f790 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
2f7a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f7b0 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
2f7c0 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
2f7d0 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
2f7e0 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
2f7f0 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
2f800 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
2f810 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
2f820 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
2f830 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2f840 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2f850 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2f860 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
2f870 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
2f880 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
2f890 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2f8a0 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
2f8b0 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
2f8c0 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
2f8d0 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
2f8e0 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
2f8f0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
2f900 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
2f910 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
2f920 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
2f930 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
2f940 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2f950 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
2f960 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
2f970 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
2f980 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f990 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
2f9a0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
2f9b0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
2f9c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f9d0 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
2f9e0 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20   rc ){.    eNew 
2f9f0 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e  = eOld;.  }.  eN
2fa00 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ew = sqlite3Page
2fa10 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2fa20 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a  pPager, eNew);..
2fa30 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
2fa40 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d  Op->p2];.  pOut-
2fa50 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
2fa60 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
2fa70 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
2fa80 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
2fa90 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2faa0 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
2fab0 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
2fac0 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
2fad0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
2fae0 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
2faf0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2fb00 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
2fb10 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2fb20 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
2fb30 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
2fb40 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
2fb50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
2fb60 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
2fb70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
2fb80 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
2fb90 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
2fba0 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
2fbb0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2fbc0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2fbd0 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
2fbe0 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
2fbf0 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
2fc00 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
2fc10 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
2fc20 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
2fc30 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
2fc40 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
2fc50 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  : {.  assert( p-
2fc60 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2fc70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
2fc80 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
2fc90 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61  Msg, db);.  brea
2fca0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2fcb0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2fcc0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
2fcd0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63  )./* Opcode: Inc
2fce0 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20  rVacuum P1 P2 * 
2fcf0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72  * *.**.** Perfor
2fd00 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20  m a single step 
2fd10 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74  of the increment
2fd20 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64  al vacuum proced
2fd30 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31  ure on.** the P1
2fd40 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
2fd50 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e  e vacuum has fin
2fd60 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69  ished, jump to i
2fd70 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32  nstruction.** P2
2fd80 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
2fd90 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2fda0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2fdb0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  n..*/.case OP_In
2fdc0 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20  crVacuum: {     
2fdd0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2fde0 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
2fdf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2fe00 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2fe10 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2fe20 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2fe30 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2fe40 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
2fe50 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2fe60 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
2fe70 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2fe80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2fe90 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
2fea0 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  Bt);.  VdbeBranc
2feb0 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54  hTaken(rc==SQLIT
2fec0 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28  E_DONE,2);.  if(
2fed0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
2fee0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
2fef0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
2ff00 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2ff10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2ff20 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
2ff30 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
2ff40 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
2ff50 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
2ff60 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20  ents to expire. 
2ff70 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64   When an expired
2ff80 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73   statement.** is
2ff90 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67 20   executed using 
2ffa0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
2ffb0 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75  t will either au
2ffc0 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72  tomatically.** r
2ffd0 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66 20  eprepare itself 
2ffe0 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67 69  (if it was origi
2fff0 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73  nally created us
30000 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ing sqlite3_prep
30010 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20  are_v2()).** or 
30020 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  it will fail wit
30030 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e  h SQLITE_SCHEMA.
30040 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73  .** .** If P1 is
30050 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c   0, then all SQL
30060 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f   statements beco
30070 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50  me expired. If P
30080 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a  1 is non-zero,.*
30090 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20  * then only the 
300a0 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74  currently execut
300b0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ing statement is
300c0 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73   expired..*/.cas
300d0 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20  e OP_Expire: {. 
300e0 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b   if( !pOp->p1 ){
300f0 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
30100 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
30110 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73  ents(db);.  }els
30120 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e{.    p->expire
30130 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 1;.  }.  bre
30140 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
30150 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
30160 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64  D_CACHE./* Opcod
30170 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20  e: TableLock P1 
30180 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
30190 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72  nopsis: iDb=P1 r
301a0 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a  oot=P2 write=P3.
301b0 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c  **.** Obtain a l
301c0 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75  ock on a particu
301d0 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20  lar table. This 
301e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
301f0 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a  nly used when.**
30200 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
30210 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  e feature is ena
30220 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  bled. .**.** P1 
30230 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
30240 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
30250 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
30260 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
30270 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
30280 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
30290 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
302a0 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
302b0 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
302c0 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
302d0 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
302e0 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
302f0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
30300 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
30310 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
30320 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
30330 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
30340 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
30350 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
30360 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
30370 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
30380 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
30390 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
303a0 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
303b0 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63  .  u8 isWriteLoc
303c0 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b  k = (u8)pOp->p3;
303d0 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f  .  if( isWriteLo
303e0 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c  ck || 0==(db->fl
303f0 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55  ags&SQLITE_ReadU
30400 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20  ncommitted) ){. 
30410 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d     int p1 = pOp-
30420 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74  >p1; .    assert
30430 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62  ( p1>=0 && p1<db
30440 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
30450 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
30460 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31  p->btreeMask, p1
30470 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
30480 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
30490 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
304a0 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
304b0 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
304c0 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
304d0 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
304e0 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
304f0 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
30500 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
30510 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
30520 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
30530 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
30540 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
30550 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61  Msg, db, "databa
30560 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
30570 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
30580 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
30590 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
305a0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
305b0 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
305c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
305d0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
305e0 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
305f0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
30600 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
30610 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
30620 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
30630 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
30640 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
30650 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
30660 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
30670 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
30680 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
30690 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
306a0 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
306b0 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
306c0 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
306d0 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
306e0 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
306f0 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
30700 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
30710 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
30720 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
30730 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
30740 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
30750 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
30760 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
30770 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
30780 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
30790 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d   ) sqlite3VtabIm
307a0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
307b0 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62  Tab->pVtab);.  b
307c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
307d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
307e0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
307f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30800 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30810 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
30820 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  te P1 * * P4 *.*
30830 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
30840 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
30850 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
30860 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  se P1. Call the 
30870 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a  xCreate method.*
30880 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  * for that table
30890 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
308a0 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73  eate: {.  rc = s
308b0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
308c0 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
308d0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d  , pOp->p4.z, &p-
308e0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65  >zErrMsg);.  bre
308f0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30900 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30910 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
30920 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30930 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30940 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
30950 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
30960 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
30970 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
30980 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
30990 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
309a0 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
309b0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
309c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
309d0 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e  stroy: {.  p->in
309e0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a  VtabMethod = 2;.
309f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
30a00 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
30a10 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
30a20 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  p4.z);.  p->inVt
30a30 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
30a40 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30a50 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30a60 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
30a70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30a80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30a90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65  ./* Opcode: VOpe
30aa0 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  n P1 * * P4 *.**
30ab0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
30ac0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
30ad0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
30ae0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
30af0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20  tructure..** P1 
30b00 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62  is a cursor numb
30b10 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  er.  This opcode
30b20 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20   opens a cursor 
30b30 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  to the virtual.*
30b40 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72  * table and stor
30b50 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69  es that cursor i
30b60 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P1..*/.case OP
30b70 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  _VOpen: {.  Vdbe
30b80 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
30b90 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
30ba0 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
30bb0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
30bc0 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
30bd0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
30be0 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  le;..  assert( p
30bf0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
30c00 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
30c10 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
30c20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
30c30 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
30c40 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
30c50 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
30c60 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
30c70 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
30c80 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70  odule);.  rc = p
30c90 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
30ca0 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f  tab, &pVtabCurso
30cb0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
30cc0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
30cd0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53   pVtab);.  if( S
30ce0 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
30cf0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
30d00 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
30d10 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
30d20 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
30d30 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
30d40 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
30d50 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73  ialize vdbe curs
30d60 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
30d70 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
30d80 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
30d90 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
30da0 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
30db0 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
30dc0 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
30dd0 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  sor;.    }else{.
30de0 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
30df0 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20  Failed = 1;.    
30e00 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
30e10 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  e(pVtabCursor);.
30e20 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
30e30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30e40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
30e50 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
30e60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30e70 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
30e80 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
30e90 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
30ea0 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e   Synopsis: iplan
30eb0 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34  =r[P3] zplan='P4
30ec0 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  '.**.** P1 is a 
30ed0 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73  cursor opened us
30ee0 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69  ing VOpen.  P2 i
30ef0 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20  s an address to 
30f00 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68  jump to if.** th
30f10 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c  e filtered resul
30f20 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a  t set is empty..
30f30 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68  **.** P4 is eith
30f40 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72  er NULL or a str
30f50 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e  ing that was gen
30f60 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42  erated by the xB
30f70 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68  estIndex.** meth
30f80 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
30f90 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74  .  The interpret
30fa0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20  ation of the P4 
30fb0 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a  string is left.*
30fc0 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  * to the module 
30fd0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
30fe0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
30ff0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46  e invokes the xF
31000 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
31010 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
31020 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62  e specified.** b
31030 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67  y P1.  The integ
31040 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61  er query plan pa
31050 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74  rameter to xFilt
31060 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  er is stored in 
31070 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20  register.** P3. 
31080 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74  Register P3+1 st
31090 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61  ores the argc pa
310a0 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61  rameter to be pa
310b0 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78  ssed to the.** x
310c0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52  Filter method. R
310d0 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50  egisters P3+2..P
310e0 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65  3+1+argc are the
310f0 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f   argc.** additio
31100 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77  nal parameters w
31110 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20  hich are passed 
31120 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73  to.** xFilter as
31130 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20   argv. Register 
31140 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67  P3+2 becomes arg
31150 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64  v[0] when passed
31160 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a   to xFilter..**.
31170 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64  ** A jump is mad
31180 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72  e to P2 if the r
31190 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20  esult set after 
311a0 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20  filtering would 
311b0 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73  be empty..*/.cas
311c0 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20  e OP_VFilter: { 
311d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
311e0 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
311f0 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73  Query;.  const s
31200 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
31210 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
31220 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41  Query;.  Mem *pA
31230 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc;.  sqlite3_v
31240 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
31250 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
31260 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
31270 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
31280 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  ur;.  int res;. 
31290 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a   int i;.  Mem **
312a0 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79  apArg;..  pQuery
312b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
312c0 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
312d0 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
312e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
312f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p1];.  assert( m
31300 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79  emIsValid(pQuery
31310 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ) );.  REGISTER_
31320 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
31330 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
31340 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
31350 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
31360 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
31370 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
31380 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
31390 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
313a0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
313b0 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
313c0 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
313d0 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
313e0 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
313f0 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
31400 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
31410 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
31420 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
31430 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
31440 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
31450 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
31460 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
31470 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
31480 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20  /.  {.    res = 
31490 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  0;.    apArg = p
314a0 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
314b0 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
314c0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
314d0 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
314e0 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  1];.    }..    p
314f0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
31500 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   1;.    rc = pMo
31510 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
31520 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72  tabCursor, iQuer
31530 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
31540 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20  rg, apArg);.    
31550 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
31560 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
31570 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
31580 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
31590 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
315a0 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  K ){.      res =
315b0 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
315c0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
315d0 20 7d 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63   }.    VdbeBranc
315e0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
315f0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
31600 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
31610 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
31620 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   }.  pCur->nullR
31630 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b  ow = 0;..  break
31640 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
31650 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
31660 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
31670 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
31680 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
31690 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
316a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
316b0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76  ynopsis: r[P3]=v
316c0 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a  column(P2).**.**
316d0 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
316e0 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
316f0 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
31700 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
31710 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
31720 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
31730 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
31740 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
31750 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
31760 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
31770 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
31780 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
31790 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
317a0 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
317b0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
317c0 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
317d0 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
317e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
317f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
31800 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
31810 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
31820 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
31830 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
31840 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
31850 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
31860 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
31870 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
31880 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
31890 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
318a0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
318b0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
318c0 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
318d0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
318e0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
318f0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
31900 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
31910 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
31920 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
31930 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
31940 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
31950 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20    sContext.pOut 
31960 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65  = pDest;.  MemSe
31970 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
31980 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63   MEM_Null);.  rc
31990 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c   = pModule->xCol
319a0 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43  umn(pCur->pVtabC
319b0 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74  ursor, &sContext
319c0 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
319d0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
319e0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
319f0 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
31a00 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
31a10 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
31a20 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
31a30 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
31a40 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63  oding(pDest, enc
31a50 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
31a60 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
31a70 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
31a80 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
31a90 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
31aa0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
31ab0 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
31ac0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
31ad0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
31ae0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
31af0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31b00 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
31b10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
31b20 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
31b30 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20  : VNext P1 P2 * 
31b40 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63  * *.**.** Advanc
31b50 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
31b60 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  P1 to the next r
31b70 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74  ow in its result
31b80 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70   set and.** jump
31b90 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
31ba0 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20  P2.  Or, if the 
31bb0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
31bc0 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65  s reached.** the
31bd0 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75   end of its resu
31be0 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c  lt set, then fal
31bf0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
31c00 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
31c10 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e  n..*/.case OP_VN
31c20 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ext: {   /* jump
31c30 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
31c40 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
31c50 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
31c60 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
31c70 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72  t res;.  VdbeCur
31c80 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65  sor *pCur;..  re
31c90 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20  s = 0;.  pCur = 
31ca0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
31cb0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
31cc0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
31cd0 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
31ce0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
31cf0 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
31d00 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
31d10 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
31d20 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
31d30 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
31d40 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  ( pModule->xNext
31d50 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65   );..  /* Invoke
31d60 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74   the xNext() met
31d70 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
31d80 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77  e. There is no w
31d90 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ay for the.  ** 
31da0 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65  underlying imple
31db0 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74  mentation to ret
31dc0 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20  urn an error if 
31dd0 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e  one occurs durin
31de0 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20  g.  ** xNext(). 
31df0 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65  Instead, if an e
31e00 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75  rror occurs, tru
31e10 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69  e is returned (i
31e20 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a  ndicating that .
31e30 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61    ** data is ava
31e40 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20  ilable) and the 
31e50 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72  error code retur
31e60 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e  ned when xColumn
31e70 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74   or.  ** some ot
31e80 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65  her method is ne
31e90 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68  xt invoked on th
31ea0 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74  e save virtual t
31eb0 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a  able cursor..  *
31ec0 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  /.  p->inVtabMet
31ed0 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  hod = 1;.  rc = 
31ee0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
31ef0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
31f00 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
31f10 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69  thod = 0;.  sqli
31f20 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
31f30 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
31f40 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
31f50 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  OK ){.    res = 
31f60 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43  pModule->xEof(pC
31f70 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
31f80 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
31f90 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b  chTaken(!res,2);
31fa0 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20  .  if( !res ){. 
31fb0 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
31fc0 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20  s data, jump to 
31fd0 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70  P2 */.    pc = p
31fe0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
31ff0 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
32000 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65  _interrupt;.}.#e
32010 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
32020 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
32030 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
32040 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32050 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
32060 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20   VRename P1 * * 
32070 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
32080 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
32090 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
320a0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
320b0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
320c0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
320d0 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
320e0 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d  esponding xRenam
320f0 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61  e method. The va
32100 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74  lue.** in regist
32110 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20  er P1 is passed 
32120 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67  as the zName arg
32130 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65  ument to the xRe
32140 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a  name method..*/.
32150 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a  case OP_VRename:
32160 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
32170 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20  b *pVtab;.  Mem 
32180 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62  *pName;..  pVtab
32190 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
321a0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65  ->pVtab;.  pName
321b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
321c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74  ];.  assert( pVt
321d0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
321e0 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74  name );.  assert
321f0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61  ( memIsValid(pNa
32200 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  me) );.  assert(
32210 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
32220 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
32230 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61  ACE(pOp->p1, pNa
32240 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  me);.  assert( p
32250 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Name->flags & ME
32260 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63  M_Str );.  testc
32270 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
32280 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a  =SQLITE_UTF8 );.
32290 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
322a0 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
322b0 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74  TF16BE );.  test
322c0 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
322d0 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  ==SQLITE_UTF16LE
322e0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
322f0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
32300 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49  ding(pName, SQLI
32310 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20  TE_UTF8);.  if( 
32320 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
32330 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d  .    rc = pVtab-
32340 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
32350 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e  e(pVtab, pName->
32360 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  z);.    sqlite3V
32370 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
32380 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70  p, pVtab);.    p
32390 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
323a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
323b0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
323c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
323d0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
323e0 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20  : VUpdate P1 P2 
323f0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
32400 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40  psis: data=r[P3@
32410 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P2].**.** P4 is 
32420 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
32430 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
32440 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
32450 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
32460 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
32470 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
32480 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
32490 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
324a0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
324b0 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
324c0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
324d0 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
324e0 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
324f0 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
32500 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
32510 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
32520 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
32530 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
32540 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
32550 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
32560 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
32570 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
32580 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
32590 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
325a0 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
325b0 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
325c0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
325d0 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
325e0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
325f0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
32600 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
32610 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
32620 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
32630 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
32640 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
32650 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
32660 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
32670 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
32680 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
32690 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
326a0 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
326b0 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
326c0 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
326d0 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
326e0 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
326f0 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
32700 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
32710 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
32720 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
32730 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
32740 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
32750 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
32760 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
32770 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
32780 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
32790 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
327a0 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
327b0 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
327c0 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
327d0 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
327e0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
327f0 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
32800 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
32810 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
32820 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
32830 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  rted..**.** P5 i
32840 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69  s the error acti
32850 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c  ons (OE_Replace,
32860 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e   OE_Fail, OE_Ign
32870 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20  ore, etc) to.** 
32880 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73  apply in the cas
32890 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e  e of a constrain
328a0 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20  t failure on an 
328b0 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
328c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
328d0 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
328e0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
328f0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
32900 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
32910 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
32920 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
32930 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
32940 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
32950 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32960 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70  2==1        || p
32970 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20  Op->p5==OE_Fail 
32980 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
32990 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20  _Rollback .     
329a0 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
329b0 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70  _Abort || pOp->p
329c0 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20  5==OE_Ignore || 
329d0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c  pOp->p5==OE_Repl
329e0 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ace.  );.  asser
329f0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
32a00 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  0 );.  pVtab = p
32a10 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
32a20 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
32a30 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
32a40 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
32a50 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d  e;.  nArg = pOp-
32a60 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
32a70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
32a80 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  TAB );.  if( ALW
32a90 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  AYS(pModule->xUp
32aa0 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20  date) ){.    u8 
32ab0 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
32ac0 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
32ad0 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  ict;.    apArg =
32ae0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
32af0 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  X = &aMem[pOp->p
32b00 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  3];.    for(i=0;
32b10 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
32b20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
32b30 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20  IsValid(pX) );. 
32b40 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
32b50 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20  hange(p, pX);.  
32b60 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
32b70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
32b80 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61     }.    db->vta
32b90 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f  bOnConflict = pO
32ba0 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20  p->p5;.    rc = 
32bb0 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
32bc0 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70  (pVtab, nArg, ap
32bd0 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  Arg, &rowid);.  
32be0 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
32bf0 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e  lict = vtabOnCon
32c00 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74  flict;.    sqlit
32c10 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
32c20 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
32c30 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
32c40 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29  _OK && pOp->p1 )
32c50 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
32c60 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b  nArg>1 && apArg[
32c70 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d  0] && (apArg[0]-
32c80 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29  >flags&MEM_Null)
32c90 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61   );.      db->la
32ca0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
32cb0 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  wid = rowid;.   
32cc0 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30   }.    if( (rc&0
32cd0 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  xff)==SQLITE_CON
32ce0 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e  STRAINT && pOp->
32cf0 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74  p4.pVtab->bConst
32d00 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69  raint ){.      i
32d10 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  f( pOp->p5==OE_I
32d20 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20  gnore ){.       
32d30 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
32d40 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
32d50 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63        p->errorAc
32d60 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35  tion = ((pOp->p5
32d70 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20  ==OE_Replace) ? 
32d80 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e  OE_Abort : pOp->
32d90 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  p5);.      }.   
32da0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d   }else{.      p-
32db0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20  >nChange++;.    
32dc0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
32dd0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32de0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
32df0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
32e00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
32e10 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
32e20 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
32e30 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
32e40 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
32e50 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
32e60 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
32e70 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
32e80 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
32e90 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
32ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
32eb0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
32ec0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c   pOut->u.i = sql
32ed0 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
32ee0 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  e(db->aDb[pOp->p
32ef0 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b  1].pBt);.  break
32f00 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  ;.}.#endif...#if
32f10 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
32f20 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
32f30 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67  /* Opcode: MaxPg
32f40 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cnt P1 P2 P3 * *
32f50 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65  .**.** Try to se
32f60 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  t the maximum pa
32f70 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74  ge count for dat
32f80 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20  abase P1 to the 
32f90 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20  value in P3..** 
32fa0 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d  Do not let the m
32fb0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
32fc0 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65  t fall below the
32fd0 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f   current page co
32fe0 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f  unt and.** do no
32ff0 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78  t change the max
33000 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
33010 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a  value if P3==0..
33020 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
33030 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
33040 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61  nt after the cha
33050 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  nge in register 
33060 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  P2..*/.case OP_M
33070 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20  axPgcnt: {      
33080 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
33090 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e  erelease */.  un
330a0 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61  signed int newMa
330b0 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  x;.  Btree *pBt;
330c0 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
330d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
330e0 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20    newMax = 0;.  
330f0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
33100 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69     newMax = sqli
33110 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
33120 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  (pBt);.    if( n
33130 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65  ewMax < (unsigne
33140 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d  d)pOp->p3 ) newM
33150 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70  ax = (unsigned)p
33160 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f  Op->p3;.  }.  pO
33170 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
33180 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75  3BtreeMaxPageCou
33190 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b  nt(pBt, newMax);
331a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
331b0 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  if.../* Opcode: 
331c0 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a  Init * P2 * P4 *
331d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53  .** Synopsis:  S
331e0 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a  tart at P2.**.**
331f0 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69   Programs contai
33200 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  n a single insta
33210 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  nce of this opco
33220 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66  de as the very f
33230 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a  irst.** opcode..
33240 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
33250 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
33260 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
33270 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
33280 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
33290 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
332a0 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
332b0 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
332c0 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72   callback..** Or
332d0 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c   if P4 is blank,
332e0 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20   use the string 
332f0 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
33300 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a  te3_sql()..**.**
33310 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65   If P2 is not ze
33320 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ro, jump to inst
33330 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63  ruction P2..*/.c
33340 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20  ase OP_Init: {  
33350 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
33360 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63  */.  char *zTrac
33370 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20  e;.  char *z;.. 
33380 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a   if( pOp->p2 ){.
33390 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
333a0 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65   - 1;.  }.#ifnde
333b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
333c0 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54  ACE.  if( db->xT
333d0 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64  race.   && !p->d
333e0 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20  oingRerun.   && 
333f0 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e  (zTrace = (pOp->
33400 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
33410 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a   : p->zSql))!=0.
33420 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c    ){.    z = sql
33430 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71  ite3VdbeExpandSq
33440 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  l(p, zTrace);.  
33450 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d    db->xTrace(db-
33460 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a  >pTraceArg, z);.
33470 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
33480 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69  e(db, z);.  }.#i
33490 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
334a0 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54  FCNTL_TRACE.  zT
334b0 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
334c0 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
334d0 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20  p->zSql);.  if( 
334e0 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e  zTrace ){.    in
334f0 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  t i;.    for(i=0
33500 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
33510 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d  ){.      if( DbM
33520 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
33530 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f  Mask, i)==0 ) co
33540 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71  ntinue;.      sq
33550 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
33560 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69  ol(db, db->aDb[i
33570 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  ].zName, SQLITE_
33580 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72  FCNTL_TRACE, zTr
33590 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ace);.    }.  }.
335a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
335b0 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  _USE_FCNTL_TRACE
335c0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
335d0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64  E_DEBUG.  if( (d
335e0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
335f0 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20  E_SqlTrace)!=0. 
33600 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28    && (zTrace = (
33610 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
33620 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
33630 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71  )!=0.  ){.    sq
33640 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
33650 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c  ("SQL-trace: %s\
33660 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d  n", zTrace);.  }
33670 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
33680 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69  E_DEBUG */.#endi
33690 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
336a0 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65 61  _TRACE */.  brea
336b0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
336c0 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
336d0 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
336e0 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
336f0 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
33700 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
33710 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
33720 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
33730 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
33740 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
33750 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
33760 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
33770 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
33780 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
33790 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
337a0 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
337b0 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
337c0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
337d0 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
337e0 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
337f0 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
33800 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
33810 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
33820 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
33830 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
33840 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
33850 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
33860 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
33870 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
33880 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70  >opcode==OP_Noop
33890 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
338a0 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20  =OP_Explain );. 
338b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
338c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33900 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
33910 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
33920 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
33930 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
33940 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
33950 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
33960 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
33970 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
33980 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
33990 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
339a0 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
339b0 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
339c0 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
339d0 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
339e0 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
339f0 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
33a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a40 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
33a50 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
33a60 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
33a70 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73   u64 endTime = s
33a80 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
33a90 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d        if( endTim
33aa0 65 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e 63  e>start ) pOp->c
33ab0 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65  ycles += endTime
33ac0 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20   - start;.      
33ad0 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20  pOp->cnt++;.    
33ae0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
33af0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
33b00 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
33b10 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
33b20 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
33b30 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
33b40 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
33b50 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
33b60 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
33b70 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
33b80 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
33b90 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
33ba0 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
33bb0 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
33bc0 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
33bd0 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
33be0 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
33bf0 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
33c00 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
33c10 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
33c20 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70  ( pc>=-1 && pc<p
33c30 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66  ->nOp );..#ifdef
33c40 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
33c50 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
33c60 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
33c70 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
33c80 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22  rc!=0 ) printf("
33c90 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
33ca0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
33cb0 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55  lags & (OPFLG_OU
33cc0 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50  T2_PRERELEASE|OP
33cd0 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20  FLG_OUT2) ){.   
33ce0 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
33cf0 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  ce(pOp->p2, &aMe
33d00 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
33d10 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
33d20 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
33d30 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20  FLG_OUT3 ){.    
33d40 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
33d50 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  e(pOp->p3, &aMem
33d60 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
33d70 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
33d80 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
33d90 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
33da0 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
33db0 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
33dc0 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
33dd0 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
33de0 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
33df0 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
33e00 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
33e10 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
33e20 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
33e30 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
33e40 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
33e50 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
33e60 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
33e70 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
33e80 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
33e90 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
33ea0 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
33eb0 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
33ec0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
33ed0 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
33ee0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
33ef0 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71        pc, p->zSq
33f00 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
33f10 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
33f20 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
33f30 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
33f40 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
33f50 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
33f60 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
33f70 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
33f80 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20  aOnFault>0 ){.  
33f90 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
33fa0 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65  eSchema(db, rese
33fb0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31  tSchemaOnFault-1
33fc0 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69  );.  }..  /* Thi
33fd0 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
33fe0 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72  y out of this pr
33ff0 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76  ocedure.  We hav
34000 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73  e to.  ** releas
34010 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  e the mutexes on
34020 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72   btrees that wer
34030 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68  e acquired at th
34040 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76  e.  ** top. */.v
34050 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62  dbe_return:.  db
34060 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
34070 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63  stRowid;.  testc
34080 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29  ase( nVmStep>0 )
34090 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ;.  p->aCounter[
340a0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
340b0 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69  S_VM_STEP] += (i
340c0 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71  nt)nVmStep;.  sq
340d0 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70  lite3VdbeLeave(p
340e0 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
340f0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
34100 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f  re if a string o
34110 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68  r blob larger th
34120 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  an SQLITE_MAX_LE
34130 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63  NGTH.  ** is enc
34140 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74  ountered..  */.t
34150 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65  oo_big:.  sqlite
34160 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
34170 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72  ErrMsg, db, "str
34180 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
34190 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  big");.  rc = SQ
341a0 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67  LITE_TOOBIG;.  g
341b0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
341c0 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
341d0 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c  to here if a mal
341e0 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a  loc() fails..  *
341f0 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e  /.no_mem:.  db->
34200 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
34210 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
34220 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
34230 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65  , db, "out of me
34240 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
34250 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
34260 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
34270 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
34280 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
34290 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
342a0 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
342b0 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
342c0 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
342d0 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
342e0 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
342f0 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
34300 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
34310 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
34320 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
34330 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
34340 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
34350 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
34360 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
34370 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
34380 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
34390 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
343a0 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
343b0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
343c0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
343d0 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  if the sqlite3_i
343e0 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73  nterrupt() API s
343f0 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70  ets the interrup
34400 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a  t.  ** flag..  *
34410 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  /.abort_due_to_i
34420 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65  nterrupt:.  asse
34430 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  rt( db->u1.isInt
34440 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63  errupted );.  rc
34450 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
34460 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  UPT;.  p->rc = r
34470 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  c;.  sqlite3SetS
34480 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
34490 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
344a0 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
344b0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
344c0 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.